WCF XML Post请求仅部分加载对象

问题描述 投票:0回答:2

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

对象样本:

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

输入样本

[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;
    }

XML示例:

      <ClaimKey>str1234</ClaimKey>
  <VehicleRegistrationNo>str1234</VehicleRegistrationNo>

因此,使用上面的示例只加载“VehicleRegistrationNo”,但ClaimKey为null。

XML和类更大,但它加载了大约40%的属性。

c# xml wcf post
2个回答
0
投票

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

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

如果有任何我可以帮助的话,请随时与我联系。


1
投票

对于那些坚持这一点的其他人来说,这是因为XML中的节点不是按字母顺序排列的,并且没有设置DataMember(OrderNo)。因此,当它序列化对象时,.NET只是在做“最好的”。

© www.soinside.com 2019 - 2024. All rights reserved.