如何配置WebAPI和DataContractSerializer,使其不会';我不在乎元素的顺序

本文关键字:我不在乎 顺序 元素 配置 何配置 WebAPI DataContractSerializer | 更新日期: 2023-09-27 18:19:35

我正在为WebAPI应用程序使用DataContractDeserializer。

我有一个PostProduct操作,它接受一个Product对象。

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引擎无法反序列化这些属性并将其保留为null。

例如,使用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,使其不关心属性的排序。理想情况下,它应该只是试图找到一个映射元素,而不是元素出现的位置。

如何配置WebAPI和DataContractSerializer,使其不会';我不在乎元素的顺序

看来你做不到。

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

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