0

我需要在 C# 网站应用程序中使用 Web 服务。我使用 wsdl 命令生成了代理类,我可以使用它来调用 Web 服务并获得结果。

问题是我在响应 xml 中有 2 个字段,它们在 cdata 标记中提供数据。这 2 个字段的值作为空字符串返回。我尝试将 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 的字符串数组来序列化混合复杂类型。

以下是值在响应中的显示方式:<Title><![CDATA[test title]]></Title> <Description><![CDATA[test description ]]></Description>

这两个元素的数据类型在 XSD 中指定为字符串。请让我知道这个问题需要如何解决。

4

1 回答 1

0

如何使用 XmlSerializer 将字符串序列化为 CDATA?

[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>
于 2013-06-18T12:45:33.443 回答