【问题标题】:Web API JSON FormatWeb API JSON 格式
【发布时间】:2014-05-17 11:07:48
【问题描述】:

我对 Web API 还很陌生,并且已经创建了一个成功的 API,但是我现在正在使用不同的 JSON,我不知道 Web API 究竟是如何很好地解析 JSON。之前,我有这样的 JSON:

[
  {
    "email": "john@example.com",
    "timestamp": 1337197600,
    "id": "55555",
  }
]

我的 Web API 方法签名是:

[HttpPost]
public HttpResponseMessage Create(List<MyOwnModel> data)
{
    ...
}

这很好用。我有一个所有 JSON 对象以及与之关联的所有属性的列表。现在我有这样的 JSON:

    randomJsonObjects: 
    [
      {
        "email": "john@example.com",
        "timestamp": 1337197600,
        "id": "55555",
      }
    ]

好吧,randomJsonObjects 打破了它。现在当我点击 API 时数据为空。我错过了什么?

【问题讨论】:

  • data 变量重命名为randomJsonObjects

标签: c# json api asp.net-web-api


【解决方案1】:

例如,对于以下模型,下面的 json 将是正确的。请注意您的有效负载以及操作参数中缺少的根级别 {} 字符。

型号:

public class AddressBook
{
    public List<ContactInfo> Contacts {get; set;}
}

控制器:

[HttpPost]
public HttpResponseMessage Create(AddressBook book)
{
}

JSON:

{
    Contacts: 
    [
      {
        "email": "john@example.com",
        "timestamp": 1337197600,
        "id": "55555",
      }
    ]
}

【讨论】:

    【解决方案2】:

    我发现了一些问题,您可以通过不同的方法解决这些问题,但我会建议最简单的方法。您想要的 json 无效。如果它包含在一个对象中,那很好,如果你只想要一个很好的数组。但是如果不包含在下面示例中的对象中,您就不能拥有自己的属性。

       randomJsonObjects: 
        [
          {
            "email": "john@example.com",
            "timestamp": 1337197600,
            "id": "55555",
          }
        ]
    

    你的方法; public HttpResponseMessage Create(List&lt;MyOwnModel&gt; data) 期待一个列表,因此一种选择是将其更改为类似的内容;

     public HttpResponseMessage Create(MyRespObj data)
    

    然后有;

     public class MyRespObj
     {
           List<MyOwnModel> randomJsonObjects;
     }
    

    现在这将产生一个响应;

    {
       randomJsonObjects: 
        [
          {
            "email": "john@example.com",
            "timestamp": 1337197600,
            "id": "55555",
          }
        ]
    }
    

    这将是有效的。另一种选择是只发送数组。无论哪种方式,您都不能只返回一个属性而不使其成为对象的一部分。如果您使用该 json 并说尝试使用 http://jsonlint.com/ 之类的内容,您会发现它无效,这确实是问题所在。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多