我對DataContract範式有點不熟悉,而且我遇到了一個反序列化問題。我有一個字段是一個字符串,但它包含xml,它沒有正確反序列化。我有一種感覺,那是因爲DCS將它視爲串行器的輸入,而不是作爲不透明的字符串對象。DataContractSerializer:保存碰巧是原始xml的字符串成員?
是否有某種方法在代碼中標記DataMember以表示「這是一個字符串,不要將其內容視爲xml」,類似於XmlIgnore?
謝謝!
我對DataContract範式有點不熟悉,而且我遇到了一個反序列化問題。我有一個字段是一個字符串,但它包含xml,它沒有正確反序列化。我有一種感覺,那是因爲DCS將它視爲串行器的輸入,而不是作爲不透明的字符串對象。DataContractSerializer:保存碰巧是原始xml的字符串成員?
是否有某種方法在代碼中標記DataMember以表示「這是一個字符串,不要將其內容視爲xml」,類似於XmlIgnore?
謝謝!
原來,最簡單的方法是從數據庫中檢索數據庫時,將來自sql server的xml字段轉換爲varchar(max)。
CAST(CONVERT(XML,[RawXml],0) AS VARCHAR(MAX)) AS RawXml
在這種情況下,序列化程序似乎忽略它所需的。 雖然感謝您的幫助!
好了,相當於[XmlIgnore]
只是不把一個[DataMember]
你的財產/場 - 如果你與[DataMember]
否則一切裝飾。
但我不明白你怎麼可以告訴DataContractSerializer將該屬性視爲一個不透明的字符串,沒有別的。
你可以嘗試有一個單獨的屬性,你的內容字符串後加<![CDATA[
之前和]]>
,和序列化屬性,而不是你的原始XML屬性(由裝飾新的屬性與[DataMember]
屬性)。
事情是這樣的:
public string XmlContent { get; set; }
[DataMember]
public string XmlContentSafe
{
get { return "<![CDATA[" + XmlContent + "]]>"; }
}
也許這樣你可以欺騙DCS? (從來沒有嘗試過 - 只是猜測....)
有一個簡單的方法做,只是聲明與原始的XML屬性作爲的XmlElement
[DataMember]
public XmlElement RawXML { private get; set; }
是啊,我猜XmlIgnore是不太什麼我將要傳送該走了,因爲我要的領域,只是沒有序列化。我想我希望用DataMember的一個技巧來表明你想要一個成員序列化到某種類型。我會嘗試CData的東西! – bwerks 2010-06-01 15:11:15