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来序列化同一个对象,序列化(和反序列化)就像一个魅力。

现在 ,如果有人知道DataContractJsonSerializerDataContractSerializer相比有更多限制,我全都耳朵……