【问题标题】:How to define the order of property deserialization when using ASP.NET Web API 2.2 OData V4使用 ASP.NET Web API 2.2 OData V4 时如何定义属性反序列化的顺序
【发布时间】:2015-08-28 16:38:28
【问题描述】:

我想在使用 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; }
}

在这种情况下,应在 FirstName 和 LastName 之前反序列化 EmployeeID 属性。 FirstName 和 LastName 可以按任何相互顺序反序列化。

是否有一个属性可以实现这一点,或者是否有另一种标准的方式来实现属性反序列化顺序的定义?

最好的问候,

亨里克·达尔

【问题讨论】:

    标签: odata


    【解决方案1】:

    您可以将DataMember 属性添加到您的属性,然后指定Order 属性。

    请注意,未使用此属性修饰的属性将始终以详细信息here 显示在最前面。

    【讨论】:

    • 其实这个好像不行。我已将 DataContract 属性添加到类中,并将 DataMember 属性添加到 Order 为 0 或 1 的属性中。然而,反序列化的顺序与以前完全相同,并且不遵守 DataMember 的顺序。看起来顺序是按字母顺序排列的。在我的真实案例中,Employee 有一个超类,我还为其添加了一个 DataContract 和一个 KnownType 属性。它读到“如果数据协定类型是继承层次结构的一部分,则其基本类型的数据成员始终排在第一位。”。事实并非如此。
    • @HenrikDahl 您使用哪种格式获取数据,json 还是 atom?
    • DataMember不影响OData中的反序列化,顺序由序列化内容中属性的顺序决定。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-08
    • 2014-10-08
    • 2014-04-27
    • 1970-01-01
    相关资源
    最近更新 更多