asp.net-mvc-4 - ASP.net Web API - 将数组名称添加到输出

标签 asp.net-mvc-4 asp.net-web-api

我正在尝试更改 Web API 的 json 输出。假设我有一个像 People 这样的对象,当前的输出是这样的:

[{name:"John", sex:"M"},{name:"Simon", sex:"M"}]

但是我希望输出是这样的:
{"people":[{name:"John", sex:"M"},{name:"Simon", sex:"M"}]}

关于如何做到这一点的任何想法?

最佳答案

选项 1 - 创建新模型

而不是回来

public IEnumerable<Person> Get()

返回
public People Get()

在哪里
public class People {
    public IEnumerable<Person> People {get; set;}
}

选项 2 - 返回动态

而不是回来
public IEnumerable<Person> Get()

返回
public dynamic Get() {
    IEnumerable<Person> p = //initialize to something;
    return new {people = p};
}

选项 3 - 修改 JsonMediaTypeFormatter

你仍然可以返回
public IEnumerable<Person> Get()

但添加以下类:
public class PeopleAwareJsonMediaTypeFormatter : JsonMediaTypeFormatter
{
    public override System.Threading.Tasks.Task WriteToStreamAsync(Type type, object value, System.IO.Stream writeStream, HttpContent content, TransportContext transportContext)
    {
        if ((typeof (IEnumerable<People>).IsAssignableFrom(type)))
        {
            value = new {people = value};
        }
        return base.WriteToStreamAsync(type, value, writeStream, content, transportContext);
    }
}

现在在 WebApiConfig 中只需注册新的格式化程序而不是旧的 JSON 格式化程序:
config.Formatters.RemoveAt(0);
config.Formatters.Insert(0, new PeopleAwareMediaTypeFormatter());

关于asp.net-mvc-4 - ASP.net Web API - 将数组名称添加到输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14451559/

相关文章:

javascript - 如何在 MVC 应用程序中解析来自 JavaScript 的相对路径

c# - 在 MVC4 中注册启动脚本

c# - Web.API MapHttpRoute 参数

asp.net-web-api - Visual Studio for Mac 添加 ADO.NET 实体数据模型模板

jquery - 如何增加 ASP.NET WebAPI Post 调用的 json 大小限制?

asp.net-web-api - 可通过LAN访问的自托管Web Api

asp.net-mvc - 创建项目后更改 View 引擎

asp.net-mvc - 在 MVC ActionLink 中使用 Knockout 绑定(bind)

asp.net-mvc-4 - 将 WebSercurity.CreateAccount 与 TrasactionScope 中的其他查询一起使用,不启用 DTC

REST API 和 HTTP 状态代码