我有一个设计对象
[DataContract(IsReference = true)]
public class Entity : IEntity
{
.....
}
当我设置IsReference = true时,如果我使用带有json格式的Restful来使用WCF服务,我会有一个例外,因为DataContractJsonSerializer不支持IsReference属性。
如果我删除IsReference = true,当通过Restful with Json使用WCF服务或通过WCF SOAP使用WCF服务时,将发生循环引用问题。
那我该如何解决这个问题?
我找到了一个解决方法,用Newtonsoft JsonSerializer替换DataContractJsonSerializer。它将解决这个问题。
我按照https://itq.nl/replacing-wcf-datacontractjsonserializer-with-newtonsoft-jsonserializer/
上的文章进行操作答案 0 :(得分:0)
虽然标准的Microsoft JSON序列化程序确实不支持它,但Json支持它。
使序列化句柄自引用这样的对象:
WebAPI Rest服务器:
在反序列化之前,您可能需要将以下解析器附加到您的设置:
settings.ContractResolver = new DynamicContractResolver();
public class DynamicContractResolver : DefaultContractResolver
{
protected override JsonProperty CreateProperty(System.Reflection.MemberInfo member, MemberSerialization memberSerialization)
{
var r = base.CreateProperty(member, memberSerialization);
r.Ignored = false;
return r;
}
}
客户:
JsonConvert.SerializeObject(theObject, new JsonSerializerSettings { ReferenceLoopHandling = ReferenceLoopHandling.Serialize })
道德:不要使用Micrososft JSON序列化程序。