2

是否有任何序列化/反序列化方案:DataContractSerializer可以處理,而DataContractJsonSerializer不能DataContractJsonSerializer可以處理循環引用嗎?

特別是,我在考慮循環引用:this MSDN page解釋瞭如何通過在DataContractAttribute構造函數中使用IsReference = true來管理循環引用DataContractSerializer。另一方面,DataContractAttribute.IsReference文檔沒有明確聲明其適用性限於DataContractSerializer

請問DataContractJsonSerializer也會兌現IsReference屬性嗎?

回答

7

沒有什麼喜歡在下午好老動手測試...

在應用的類主題系列化DataContractAttribute.IsReference = true

[DataContract(IsReference = true)] 
public class SerializableClass { 
... 
} 

,並試圖使用DataContractJsonSerializer序列化,

var serializer = new DataContractJsonSerializer(typeof(SerializableClass)); 
serializer.WriteObject(stream, obj); 

WriteObject方法將拋出一個異常:

System.Runtime.Serialization.SerializationException:類型'SerializableClass'無法序列化爲JSON,因爲它的IsReference設置爲'True'。 JSON格式不支持引用,因爲沒有用於表示引用的標準格式。要啓用序列化,請禁用該類型的IsReference設置或該類型的適當父類。

如果我在另一方面利用DataContractSerializer序列化的同一個對象,序列化(和反序列化)的作品就像一個魅力。

現在,如果有人用DataContractSerializerDataContractJsonSerializer比較多的限制知道,我所有的耳朵...