【问题标题】:MVC4: Include object name in JsonMVC4:在 Json 中包含对象名称
【发布时间】:2012-04-20 01:53:44
【问题描述】:

我有一个关于 MVC4(测试版)问题的问题,我一直在努力解决一段时间。问题是我想创建一个带有为我的 webapi 添加的对象名称的 json。必须创建 json,因为接收方需要这个。我的 .NET/MVC 知识有限,请多多包涵。我尝试搜索该主题,但由于 MVC4 仍处于测试阶段,因此很难找到有关该主题的好信息。

我已经在我的解决方案中导入了 JSON.NET 格式化程序,但这并没有添加对象名称

现在在 MVC4 中创建的 json:

[{"ID":36,"Name":"Test3","Description":"Description Test3"},{"ID": 37,"Name": "Test4","Description": "Description Test4"}]

我希望 json 看起来像这样:

{"Goal":[{"ID":36,"Name":"Test3","Description":"Description Test3"},{"ID": 37,"Name": "Test4","Description": "Description Test4"}]}

所以我喜欢将对象名称(目标)包含在 json 中。

我为此使用的 api 控制器中的代码是:

    StoreDBContext db = new StoreDBContext();

    //
    // GET /api/goals
    public IQueryable<Goals> Get()
    {
        return db.Goals;
    }

我假设我需要在某个地方循环添加对象名称,但我不确定如何...希望有人可以帮助我解决这个问题!

【问题讨论】:

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


【解决方案1】:

返回如下内容:

new { Goal = db.Goals().AsEnumerable().ToList() }

您可以使用匿名对象来添加对象中不存在的属性和内容。

如果您希望 JSON.NET 正确反序列化,您也可以为 JSON.NET 编写自定义转换器,但如果您不关心输出的反序列化,上述解决方案将起作用。

【讨论】:

  • 感谢您的回复!目前我并不真正关心反序列化,所以这个解决方案应该足够了。但是 db 对象 (StoreDBContext) 似乎没有实现 Get 方法。但是,在尝试返回上述命令时,我确实收到以下错误:“StoreDBContext”不包含“Get”的定义,并且找不到接受“StoreDBContext”类型的第一个参数的扩展方法“Get”(你错过了吗? using 指令或程序集引用?我在这里遗漏了什么吗?
  • 感谢您的更新,但现在我收到以下错误:“无法将类型 'System.Collections.Generic.IEnumerable' 隐式转换为 'System.Linq.IQueryable'。存在显式转换(您是否缺少演员表?)我尝试弄乱代码但无法使其正常工作...
  • 在 web api 操作上将返回类型更改为对象。
  • 感谢这个现在有效,唯一的事情是我得到了每条记录的目标。我希望它成为标题。我的例子可能不清楚,因为我那里只有一条记录。我已经更新了我的问题中的示例 json。
  • @Hugo 我已经更新了答案,只需将匿名类型构造移动到列表外部而不是内部。
猜你喜欢
  • 2013-05-22
  • 2014-12-10
  • 1970-01-01
  • 1970-01-01
  • 2016-12-23
  • 1970-01-01
  • 2011-02-04
  • 2021-04-07
  • 2020-05-05
相关资源
最近更新 更多