DataContractSerializer:保留恰好是原始xml的字符串成员?

时间:2010-06-01 15:00:21

标签: wcf xml-serialization datacontractserializer

我对DataContract范例缺乏经验,而且我遇到了反序列化问题。我有一个字符串,但它包含xml,并没有正确反序列化。我有一种感觉,这是因为DCS将其视为序列化程序的输入,而不是作为不透明的字符串对象。

是否有某种方法可以在代码中标记DataMember,说“这是一个字符串,不要将其内容视为xml”,类似于XmlIgnore?

谢谢!

3 个答案:

答案 0 :(得分:2)

嗯,相当于[XmlIgnore]只是没有你的财产/字段上的[DataMember] - 如果你用[DataMember]装饰所有内容的话。

但我不知道你怎么能告诉DataContractSerializer将该属性视为不透明的字符串而不是别的。

您可以尝试使用一个单独的属性,在您的内容字符串之前添加<![CDATA[并在]]>之后添加[DataMember],并序列化该属性而不是您的原始XML属性(通过使用{{来装饰新属性) 1}}属性)。

这样的事情:

 public string XmlContent { get; set; }

 [DataMember]
 public string XmlContentSafe 
 { 
    get { return "<![CDATA[" + XmlContent + "]]>"; }
 }

也许你可以欺骗DCS? (从来没有尝试过 - 只是猜测....)

答案 1 :(得分:0)

原来最简单的方法就是从数据库中检索来自sql server的xml字段到varchar(max)。

 CAST(CONVERT(XML,[RawXml],0) AS VARCHAR(MAX)) AS RawXml

在这种情况下,序列化程序似乎忽略了它。 谢谢你的帮助!

答案 2 :(得分:0)

有一种简单的方法,只需使用原始XML声明属性为XmlElement

[DataMember]
public XmlElement RawXML { private get; set; }