具有Restful API和循环引用问题的WCF服务

时间:2017-11-23 01:54:46

标签: c# wcf wcf-rest

我有一个设计对象

    [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/

上的文章进行操作

1 个答案:

答案 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序列化程序。