2010-06-01 31 views
2

我對DataContract範式有點不熟悉,而且我遇到了一個反序列化問題。我有一個字段是一個字符串,但它包含xml,它沒有正確反序列化。我有一種感覺,那是因爲DCS將它視爲串行器的輸入,而不是作爲不透明的字符串對象。DataContractSerializer:保存碰巧是原始xml的字符串成員?

是否有某種方法在代碼中標記DataMember以表示「這是一個字符串,不要將其內容視爲xml」,類似於XmlIgnore?

謝謝!

回答

0

原來,最簡單的方法是從數據庫中檢索數據庫時,將來自sql server的xml字段轉換爲varchar(max)。

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

在這種情況下,序列化程序似乎忽略它所需的。 雖然感謝您的幫助!

2

好了,相當於[XmlIgnore]只是不把一個[DataMember]你的財產/場 - 如果你與[DataMember]否則一切裝飾。

但我不明白你怎麼可以告訴DataContractSerializer將該屬性視爲一個不透明的字符串,沒有別的。

你可以嘗試有一個單獨的屬性,你的內容字符串後加<![CDATA[之前和]]>,和序列化屬性,而不是你的原始XML屬性(由裝飾新的屬性與[DataMember]屬性)。

事情是這樣的:

public string XmlContent { get; set; } 

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

也許這樣你可以欺騙DCS? (從來沒有嘗試過 - 只是猜測....)

+0

是啊,我猜XmlIgnore是不太什麼我將要傳送該走了,因爲我要的領域,只是沒有序列化。我想我希望用DataMember的一個技巧來表明你想要一個成員序列化到某種類型。我會嘗試CData的東西! – bwerks 2010-06-01 15:11:15

0

有一個簡單的方法做,只是聲明與原始的XML屬性作爲的XmlElement

[DataMember] 
public XmlElement RawXML { private get; set; } 
相關問題