我对DataContract范例缺乏经验,而且我遇到了反序列化问题。我有一个字符串,但它包含xml,并没有正确反序列化。我有一种感觉,这是因为DCS将其视为序列化程序的输入,而不是作为不透明的字符串对象。
是否有某种方法可以在代码中标记DataMember,说“这是一个字符串,不要将其内容视为xml”,类似于XmlIgnore?
谢谢!
答案 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; }