作为将WCF称为REST服务的一部分,类型字典的属性之一不会序列化

时间:2019-06-12 14:30:15

标签: json rest wcf serialization

我公开了将WCF称为“休息服务”;我可以使用复杂的对象调用该特定的Web服务。但是,当涉及到WCF时,类型为Dictionary的Property不会被序列化,而是变为空。我在代码中提供了更多详细信息。

InFieldValuePair是字典的

JSON请求:

{  
   "Requests":[  
      {  
         "AppRuleGroup":{  
            "AppId":0,
            "AppName":"XXX",
            "SubGroupId":0,
            "SubGroupName":"Corporates - Investment Grade",
            "GroupId":0,
            "GroupName":"Workflow",
            "ModuleId":0,
            "ModuleName":"Trading",
            "RulesLastUpdatedBy":null,
            "EvalRules":[  

            ]
         },
         "InputRequests":[  
            {  
               "Guid":"8592080a-6236-4b37-91b5-48c8a988950b",
               "InFieldValuePair":{  
                  "CurrentStatus":"Counter1",
                  "Direction":"Out"
               }
            }
         ],
         "Guid":"a0f0fba0-bf3b-4d3d-adc8-416b5448b3df"
      }
   ]
}

关于

[WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.WrappedRequest, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
        Task<List<RuleEvaluationResponse2>> Evaluate2(List<RuleEvaluationRequest2> Requests);

预期结果是应填充字典对象

1 个答案:

答案 0 :(得分:0)

首先,请确保对象的属性已由 [DataContract] / [DataMember] 装饰。
https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/using-data-contracts
此外,如果T包含其他对象,则为了确保序列化和反序列化工作正常,我们应考虑使用[KnownType]属性。
https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/data-contract-known-types
我们可以使用IExtensibleDataObject接口来处理服务器和客户端数据协定不一致且未序列化成员已正确序列化的情况。
https://docs.microsoft.com/en-us/dotnet/api/system.runtime.serialization.iextensibledataobject?view=netframework-4.8
最后,当数据项过多时。请考虑使用MaxItemsInObjectGraph属性。
https://thinksimpleshirin.wordpress.com/2011/12/06/increasing-maxitemsinobjectgraph-wcf/
随时让我知道问题是否仍然存在。