【问题标题】:formatting an odata reponse to return json格式化 odata 响应以返回 json
【发布时间】:2015-09-18 14:50:44
【问题描述】:

我正在尝试解析从以 odata 格式返回数据的 API 返回的响应。

数据包含我需要的所有数据在一个数组(值)中,但我不知道如何获取该数据并删除包含它的根/父元素。

我将此数据返回到 javascript MVC 前端,因此我需要它是 JSON 格式,但没有它的父级。

我刚刚返回整个 odata 对象的代码。

我不需要说“”odata.metadata”的父部分:“http://systech.edu/SOM_a/Api/v1/$metadata#Keys”:

这是 API 返回的 odata:

{
  "odata.metadata":"http://systech.edu/SOM_a/Api/v1/$metadata#Keys","value":[
    {
      "odata.id":"http://systech.edu/SOM_a/Api/v1/Keys('111')","Id":"111","Name":"VideoSearch","Timeout":20160,"IsDefault":false,"Auth":false,"err":false,"exclude":true,"Internal":true,"view":true
    },{
      "odata.id":"http://systech.edu/SOM_a/Api/v1/Keys('222')","Id":"222","Name":"DesktopRecorder","Timeout":20160,"IsDefault":false,"Auth":false,"err":false,"exclude":true,"Internal":true,"view":false
    },{
      "odata.id":"http://systech.edu/SOM_a/Api/v1/Keys('333')","Id":"333","Name":"Manage","Timeout":20160,"IsDefault":false,"Auth":false,"err":false,"exclude":true,"Internal":true,"view":false
    }
  ]
}

这里是处理 api 和 odata 的代码:

    using Newtonsoft.Json;
    using Newtonsoft.Json.Linq;


            WebRequest request = WebRequest.Create("http://systech.edu/som_a/api/V1/Keys");
            request.ContentType = "application/json; charset=utf-8";
            SetBasicAuthHeader(request, "xxxx", "xxxx");
            WebResponse response = request.GetResponse();
            var rawJson = new StreamReader(response.GetResponseStream()).ReadToEnd();

            json = JObject.Parse(rawJson);

所需的 JSON 输出:

{
  "odata.id":"http://systech.edu/SOM_a/Api/v1/Keys('111')","Id":"111","Name":"VideoSearch","Timeout":20160,"IsDefault":false,"Auth":false,"err":false,"exclude":true,"Internal":true,"view":true
},{
  "odata.id":"http://systech.edu/SOM_a/Api/v1/Keys('222')","Id":"222","Name":"DesktopRecorder","Timeout":20160,"IsDefault":false,"Auth":false,"err":false,"exclude":true,"Internal":true,"view":false
},{
  "odata.id":"http://systech.edu/SOM_a/Api/v1/Keys('333')","Id":"333","Name":"Manage","Timeout":20160,"IsDefault":false,"Auth":false,"err":false,"exclude":true,"Internal":true,"view":false
}

【问题讨论】:

  • 试试这个 var ODataJSON = JsonConvert.DeserializeObject(json); ODataJSON.Property("odata.metadata").Remove();

标签: c# asp.net c#-4.0 asp.net-web-api odata


【解决方案1】:

这应该可行。

var ODataJSON = JsonConvert.DeserializeObject<JObject>(json); ODataJSON.Property("odata.metadata").Remove();

【讨论】:

  • 有效,但我想知道是否有办法删除包含元素的数组。我已经编辑了原始问题以包含所需的输出。谢谢
  • 它是一个相同类型对象的数组,为什么要删除它。您能否详细说明您要在客户端执行的操作。它是数组的原因是您正在返回一个对象集合
  • 谢谢。我希望获得一组对象,然后我可以使用模型来表示每个对象。所以在 javascript 中,类似 'myCollection.each(function (model) { ...do stuff... }
猜你喜欢
  • 2013-03-11
  • 1970-01-01
  • 2019-05-18
  • 1970-01-01
  • 2014-09-11
  • 2014-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多