我有一个带有" post"方法的WCF服务,该方法将XML带入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>
因此,仅使用上述样本" vericleregistrationno"正在加载,但索赔键为null。
XML和类更大,但加载了约40%的属性。
给任何陷入困境的人,这是因为XML中的节点不是按字母顺序排列的,也没有设置datamember(orderno)。因此,当它序列化对象时,.net只是做"最好的"。
在服务器结束和客户端之间传输对象时,应确保数据合同一致。iextensibledataObject接口是保持一致性的好选择。Datamember和Isrequired属性都会影响此问题。
https://learn.microsoft.com/en-us/dotnet/framework/wcf/feature-details/data-connarts-versioning
此外,数据合同序列化器受到MaxiteMinobjectGrapl属性的约束。请参阅以下代码。
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpsGetEnabled="true" httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
<dataContractSerializer maxItemsInObjectGraph="2147483647" />
</behavior>
</serviceBehaviors>
如果有什么可以帮助的话,请随时与我联系。