Невозможно прочитать данные xml, присутствующие в ответе веб-службы, с использованием прокси-класса С#

Мне нужно использовать веб-службу в веб-приложении С#. Я создал прокси-класс с помощью команды wsdl, и я могу использовать его для вызова веб-службы и получения результата.

Проблема в том, что у меня есть 2 поля в XML-ответе, которые предоставляют данные в тегах cdata. Значения этих двух полей возвращаются в виде пустых строк. Я попытался добавить атрибут XMLText в определение поля в прокси, как показано ниже.

   [XmlText]       
   public string Title {
        get {
            return this.TitleField;
        }
        set {
            this.TitleField = value;
        }
    }

    [XmlText]
    public string Description {
        get {
            return this.descriptionField;
        }
        set {
            this.descriptionField = value;
        }
    }

но я получаю следующую ошибку, когда выполняется вышеуказанное изменение кода:

Сведения об исключении: System.InvalidOperationException: невозможно сериализовать объект типа «WService.XXXXXXXXXX», так как он имеет несколько атрибутов XmlText. Рассмотрите возможность использования массива строк с XmlTextAttribute для сериализации смешанного сложного типа.

Вот как значения отображаются в ответе: ‹Название›‹![CDATA[название теста]]›‹/Название› ‹Описание›‹![CDATA[описание теста]]›‹/Описание›

Тип данных для обоих этих элементов указан как строка в XSD. Пожалуйста, дайте мне знать, как эта проблема должна быть исправлена.


person Bhuvana    schedule 07.12.2012    source источник
comment
Подводя итог проблеме: я хотел бы прочитать значение элемента XML, в котором есть CDATA. Как следует изменить прокси-класс С# для достижения этой цели.   -  person Bhuvana    schedule 07.12.2012


Ответы (1)


Из Как вы сериализуете строку как CDATA с использованием XmlSerializer?

[Serializable]
public class MyClass
{
    public MyClass() { }

    [XmlIgnore]
    public string MyString { get; set; }
    [XmlElement("MyString")]
    public System.Xml.XmlCDataSection MyStringCDATA
    {
        get
        {
            return new System.Xml.XmlDocument().CreateCDataSection(MyString);
        }
        set
        {
            MyString = value.Value;
        }
    }
}

Использование:

MyClass mc = new MyClass();
mc.MyString = "<test>Hello World</test>";
XmlSerializer serializer = new XmlSerializer(typeof(MyClass));
StringWriter writer = new StringWriter();
serializer.Serialize(writer, mc);
Console.WriteLine(writer.ToString());

Вывод:

<?xml version="1.0" encoding="utf-16"?>
<MyClass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <MyString><![CDATA[<test>Hello World</test>]]></MyString>
</MyClass>
person Jeroen K    schedule 18.06.2013