DataContractJsonSerializer可以处理循环引用吗?
是否有DataContractSerializer 可以处理的序列化/反序列化方案,而DataContractJsonSerializer 不能 ?
特别是,我正在考虑循环引用: 这个MSDN页面解释了DataContractSerializer
通过在DataContractAttribute
构造函数中使用IsReference = true
来管理循环引用。 另一方面, 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
方法将抛出exception:
System.Runtime.Serialization.SerializationException:类型’SerializableClass’无法序列化为JSON,因为其IsReference设置为’True’。 JSON格式不支持引用,因为没有用于表示引用的标准化格式。 要启用序列化,请在类型或类型的相应父类上禁用IsReference设置。
另一方面,如果我使用DataContractSerializer
来序列化同一个对象,序列化(和反序列化)就像一个魅力。
现在 ,如果有人知道DataContractJsonSerializer
与DataContractSerializer
相比有更多限制,我全都耳朵……