【发布时间】:2016-03-22 00:04:24
【问题描述】:
我需要让我的 JSON 输出看起来像这样:
{
"User": {
"Id" : "1",
"FirstName" : "John",
"LastName" : "Doe",
... etc
我的第一个问题是这里被序列化的类名被称为Person 而不是User,我无法更改它。但是 JSON 需要User。
其次,我的 Web API 方法根本没有返回根节点,我到底做错了什么?
我的 JSON 如下所示:
{"Id":1,"BossId":null,"Title":"CEO","GivenName":"Doe", ... etc
这是非常糟糕的格式,甚至我的 Chrome 扩展程序使 JSON 更漂亮也无法识别这些东西。
这是我通过 ID 获取用户的 Web API 控制器,结果如下:
[Route("{id:int}")]
public HttpResponseMessage GetPerson(int id) {
Person person = repository.Get(id);
if (person == null) {
throw new HttpResponseException(HttpStatusCode.NotFound);
}
return Request.CreateResponse(HttpStatusCode.OK, person);
}
我还必须在这里将类属性映射到不同的名称,这是一个单独的问题。
例如,类有 GivenName 和 FamilyName,但 JSON 需要 FirstName 和 LastName。有没有我可以为此属性应用的属性?
任何帮助将不胜感激。
【问题讨论】:
-
我建议将您的课程与您想要生成的示例 json 一起发布。
-
This is so badly formatted that even my Chrome extension to make JSON pretty doesn't recognize this stuff.- 在我看来,这就像完美的 JSON。无论如何,如果你想要一个根对象,你需要包装一个匿名对象,就像这样:return Request.CreateResponse(HttpStatusCode.OK, new { User = person }); -
该类是一个简单的小型 POCO 类,类似于 Person ...名字、姓氏、ID ...它确实有一个 IEnumerable 用于多个地址,但这一切都在 JSON 中返回 OK,这只是命名问题和根节点问题。
-
我不知道为什么 Chrome JSON 格式化扩展在这方面没有发挥作用。我已经针对多个其他 JSON 端点对其进行了测试,它的格式确实很好。它拒绝对我从这里的控制器得到的东西做任何事情。我可以停止调试器,在 JSON 查看器中它看起来没问题(树出来,正确嵌套)所以它必须是有效的。
标签: c# json asp.net-web-api