ASP.NET WebApi响应模型中的订购属性从基类继承href和id

Iva*_*van 4 c# asp.net json httpresponse asp.net-web-api2

我有一个带有几个响应模型的ASP.NET Web Api 2项目.在尝试创建较小的有效负载时,我向用户提供了将实体折叠为id和href链接的选项,我想自动生成.我希望我的所有主要资源响应模型都继承自只有href和的基本响应模型id.如果我有资源Foo,这看起来像这样:

public class ResourceResponseModel
{
    public string Href { get; private set; }

    public string Id { get; private set; }

    protected ResourceResponseModel(string id)
    {
        Id = id;
    }
}

public class FooModel : ResourceResponseModel
{
    public string Name { get; private set; }

    private ExampleModel (string id, string name)
        : base(id)
    {
        Name = name;
    }

    internal static FooModel From(Foo foo)
    {
        return new FooModel(
            foo.Id,
            foo.Name
        );
    }
}
Run Code Online (Sandbox Code Playgroud)

当我的控制器被调用时,该模型被序列化 Microsoft.AspNet.Mvc.Json(object data)

这似乎工作得很好,除非我查看我最终得到的响应,它将基类属性放在最后:

{
    "name": "Foo 1",
    "href": "api/abcdefg",
    "id": "abcdefg"
}
Run Code Online (Sandbox Code Playgroud)

是否有一种简单的方法可以在资源属性之前显示基本属性?

Sim*_*son 8

您可以通过在JsonProperty属性上设置属性并传入来解决此问题Order.

public class ResourceResponseModel
{
    [JsonProperty(Order = -2)]
    public string Href { get; private set; }

    [JsonProperty(Order = -2)]
    public string Id { get; private set; }

    protected ResourceResponseModel(string id)
    {
        Id = id;
    }
}
Run Code Online (Sandbox Code Playgroud)

Order似乎默认为零,然后在序列化时从低到高排序.文档可以在这里找到.