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比较多的限制知道,我所有的耳朵...