是否存在DataContractSerializer 可以处理的序列化/反序列化方案,而DataContractJsonSerializer 不能?
特别是,我正在考虑循环引用:this MSDN page解释了DataContractSerializer
如何通过在IsReference = true
构造函数中使用DataContractAttribute
来管理循环引用。另一方面,DataContractAttribute.IsReference文档没有明确说明其适用性仅限于DataContractSerializer
。
DataContractJsonSerializer
也会尊重IsReference
属性吗?
答案 0 :(得分: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
序列化同一个对象,序列化(和反序列化)就像魅力一样。
现在,如果有人知道DataContractJsonSerializer
与DataContractSerializer
相比有更多限制,我会全力以赴......