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
序列化同一对象,则序列化(和反序列化)的工作方式就像一个超级按钮。现在,如果有人知道
DataContractJsonSerializer
与DataContractSerializer
相比有更多限制,我真是耳目一新...