DataContractSerializer是否可以处理而DataContractJsonSerializer无法处理的序列化/反序列化方案?

特别是,我正在考虑循环引用:this MSDN page解释了DataContractSerializer如何通过在IsReference = true构造函数中使用DataContractAttribute来管理循环引用。另一方面,DataContractAttribute.IsReference文档未明确声明其适用范围仅限于DataContractSerializer

DataContractJsonSerializer也会尊重IsReference属性吗?

最佳答案

下午没有什么比旧的动手测试好了...

在要序列化的类上应用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序列化同一对象,则序列化(和反序列化)的工作方式就像一个超级按钮。

现在,如果有人知道DataContractJsonSerializerDataContractSerializer相比有更多限制,我真是耳目一新...

08-26 15:20