WCF XML发布请求仅部分加载对象

时间:2019-03-18 12:17:50

标签: c# xml wcf post

我有一个带有“ POST”方法的WCF服务,该方法接收XML并将其转换为对象,问题是只有某些字段正在加载。

对象样本:

<ng-container *ngFor="let user of users; let index = index">
  <tr *ngIf="showInactiveUsers">
    <td>{{user?.firstName}}</td>
    <td>{{user?.lastName}}</td>
    <td>{{user?.email}}</td>
    <td>{{user?.attributes?.organisation}}</td>
  </tr>
  <tr *ngIf="!showInactiveUsers && user?.enabled">
    <td>{{user?.firstName}}</td>
    <td>{{user?.lastName}}</td>
    <td>{{user?.email}}</td>
    <td>{{user?.attributes?.organisation}}</td>
    <td *ngIf="user?.enabled">
  </tr>
</ng-container> 

输入样本

[DataMember, XmlElement(IsNullable = false, Type = typeof(String))]
    public String ClaimKey
    {
        get;
        set;
    }
    [DataMember, XmlElement(IsNullable = false, Type = typeof(String))]
    public String VehicleRegistrationNo
    {
        get;
        set;
    }

XML示例:

[WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Xml, RequestFormat = WebMessageFormat.Xml, BodyStyle = WebMessageBodyStyle.Bare)]
    public SalvageInstructionResponse Test(SalvageInstructionRequestHeader Item)
    {
        this._objOutput = new SalvageInstructionResponse(SalvageInstructionResponseStatus.FAILURE, "Test", Item.ToString());
        return this._objOutput;
    }

因此,使用上述示例仅加载“ VehicleRegistrationNo”,而ClaimKey为空。

XML和类较大,但正在加载约40%的属性。

2 个答案:

答案 0 :(得分:1)

对于其他陷入困境的人,这是因为XML中的节点不是按字母顺序排列的,并且未设置DataMember(OrderNo)。因此,当序列化对象时,.NET只是“尽其所能”。

答案 1 :(得分:0)

在服务器端和客户端之间传输对象时,应确保DataContract一致。 IExtensibleDataObject接口是保持一致性的不错选择。 DataMember和IsRequired属性均会影响此问题。
https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/data-contract-versioning
此外,数据协定序列化程序受MaxItemInObjectGraph属性的约束。请参考以下代码。

<behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpsGetEnabled="true" httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
          <dataContractSerializer maxItemsInObjectGraph="2147483647" />
        </behavior>
      </serviceBehaviors>

如果有任何需要帮助的地方,请随时与我联系。