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

Posted

技术标签:

【中文标题】带有 Restful API 和循环引用问题的 WCF 服务【英文标题】:WCF service with Restful API and circular reference issue 【发布时间】:2018-05-06 21:13:51 【问题描述】:

我有一个设计对象

    [DataContract(IsReference = true)]
    public class Entity : IEntity
    
         .....
    

当我设置 IsReference = true 时,如果我通过 Restful 使用 json 格式的 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】:

虽然标准的 Microsoft JSON 序列化程序确实不支持这种情况,但 Json 支持它。

让序列化处理像这样的自引用对象:

WebAPI 休息服务器:

在反序列化之前,您可能需要将以下解析器附加到您的设置中:

 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 )

道德:不要使用微软的 JSON 序列化器。

【讨论】:

我正在使用带有 Restfull 的 WCF 服务器,那么我如何配置 HttpConfiguration ?

以上是关于带有 Restful API 和循环引用问题的 WCF 服务的主要内容,如果未能解决你的问题,请参考以下文章

使用 Spring Boot 的 RESTful API 中的循环依赖

带有批处理请求的 RESTful API

设计带有一长串查询参数的 RESTful 查询 API [关闭]

在 RESTful API 中引用 URL

带有 eCheck 的 PHP RestFul API

使用 Spring Security 和 Redis 对带有 Java 配置的 RESTFul api 进行基于 Cookie 的身份验证