对从基类继承 href 和 id 的 WebApi 响应模型中的属性 ASP.NET 排序
本文关键字:模型 属性 ASP 排序 NET 响应 WebApi 继承 基类 href id | 更新日期: 2023-09-27 18:37:09
我有一个 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
);
}
}
调用我的控制器时,此模型使用 Microsoft.AspNet.Mvc.Json(object data)
这似乎工作得很好,除了当我查看我最终得到的响应时,它将基类属性放在最后:
{
"name": "Foo 1",
"href": "api/abcdefg",
"id": "abcdefg"
}
有没有一种简单的方法可以让基本属性显示在资源属性之前?
您可以通过在属性上设置 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;
}
}
Order
似乎默认为零,然后在序列化时从低到高排序。可在此处找到文档。