我正在为我的 WebAPI 应用程序使用 DataContractDeserializer。
我有一个接受 Product 对象的 PostProduct 操作。
public void PostProduct([FromBody] Product product)
{
}
[DataContract(Namespace = "")]
public class Product
{
[DataMember(EmitDefaultValue = false)]
public int Id { get; set; }
[DataMember(EmitDefaultValue = false)]
public string Name { get; set; }
}
默认情况下,显然 xml 数据必须按字母顺序发送,否则 Web API 引擎无法反序列化这些属性并将它们保留为空。
例如,使用 Fiddler,我必须发送 {0} 而 {1} 是不可接受的:
{0}: works fine
<Product xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<Id>1</Id>
<Name>name 1</Name>
</Product>
{1}: fails!
<Product xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<Name>name 1</Name>
<Id>1</Id>
</Product>
如何配置 WebAPI 和 DataContractSerializer 使其不关心属性的排序。理想情况下,它应该只是尝试查找映射元素,而不是元素出现的位置。