1

我正在为我的 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 使其不关心属性的排序。理想情况下,它应该只是尝试查找映射元素,而不是元素出现的位置。

4

1 回答 1

1

看来你不能。

我的意思是你不能告诉DataContractSerializer不关心订单。这是一个很好的讨论:http ://social.msdn.microsoft.com/Forums/vstudio/en-US/a891928b-d27a-4ef2-83b3-ee407c6b9187/order-of-data-members-in-the- xml-string-influences-反序列化-datacontractserializer

如果您收到未排序的数据,您可以尝试设置 aXmlSerializer而不是 a DataContractSerializerXmlSerializer不关心顺序。

于 2013-06-24T14:15:29.913 回答