如何配置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,使其不关心属性的排序。理想情况下,它应该只是试图找到一个映射元素,而不是元素出现的位置。
看来你做不到。
我的意思是,你不能告诉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
而不是DataContractSerializer
,XmlSerializer
不关心顺序。