使用ASP.NET Web API 2.2 OData V4时如何定义属性反序列化的顺序

使用ASP.NET Web API 2.2 OData V4时如何定义属性反序列化的顺序,odata,Odata,我想在使用ASP.NET Web API 2.2 OData V4时定义属性反序列化的顺序。也许已经有一个属性可以用来定义这一点。出于此电子邮件的目的,我将其命名为DeserializationOrderAttribute。我想我应该能够定义这样一个类: public class Employee { [DeserializationOrder(0)] public Guid EmployeeID { get; set; } [DeserializationOrder(

我想在使用ASP.NET Web API 2.2 OData V4时定义属性反序列化的顺序。也许已经有一个属性可以用来定义这一点。出于此电子邮件的目的,我将其命名为DeserializationOrderAttribute。我想我应该能够定义这样一个类:

public class Employee
{
    [DeserializationOrder(0)]
    public Guid EmployeeID { get; set; }

    [DeserializationOrder(1)]
    public string FirstName { get; set; }

    [DeserializationOrder(1)]
    public string LastName { get; set; }
}
在这种情况下,EmployeeID属性应该在FirstName和LastName之前反序列化。FirstName和LastName可以按任意顺序反序列化

是否有实现这一点的属性,或者是否有另一种实现属性反序列化顺序定义的标准方法

致以最良好的祝愿

Henrik Dahl

您可以向属性添加属性,然后指定属性

请注意,未使用此属性修饰的属性将始终首先显示为详细信息。

您可以向属性添加属性,然后指定属性


请注意,未使用此属性修饰的属性将始终作为详细信息首先显示。

实际上,这似乎不起作用。我已将DataContract属性添加到类中,并将DataMember属性添加到顺序为0或1的属性中。但是,反序列化的顺序与以前完全相同,并且不遵守DataMember的顺序。看起来是按字母顺序排列的。在我的实际案例中,Employee有一个超类,我还为其添加了一个DataContract和一个KnownType属性。它的内容是“如果数据协定类型是继承层次结构的一部分,则其基类型的数据成员始终位于顺序的第一位。”。事实并非如此。@HenrikDahl您以何种格式获取数据,json还是atom?
DataMember
不影响OData中的反序列化,顺序由序列化内容中属性的顺序决定。实际上,这似乎不起作用。我已将DataContract属性添加到类中,并将DataMember属性添加到顺序为0或1的属性中。但是,反序列化的顺序与以前完全相同,并且不遵守DataMember的顺序。看起来是按字母顺序排列的。在我的实际案例中,Employee有一个超类,我还为其添加了一个DataContract和一个KnownType属性。它的内容是“如果数据协定类型是继承层次结构的一部分,则其基类型的数据成员始终位于顺序的第一位。”。情况并非如此。@HenrikDahl获取数据的格式是json还是atom?
DataMember
不影响OData中的反序列化,顺序由序列化内容中属性的顺序决定。