Json.Net:修剪对象以节省Web流量

时间:2014-09-03 15:42:53

标签: json json.net

我从API返回一个非常复杂的JSON。我只需要将“第一级”传递给客户端,而不包含所有嵌套对象。

例如:

  {
    "name": "David",
    "age": 5,
    "school": {
        "name": "Highschool",
        "location": "AZ"
    }
}

我想向客户端传递名称&年龄,而不是“学校”。 有没有一种简单的方法可以做到这一点?

1 个答案:

答案 0 :(得分:1)

您可以将JSON解析为JObject,然后将所有“简单”属性(即非对象和数组的属性)复制到新的JObject。然后从副本中获取新的JSON。

例如:

string json = @"
{
    ""name"": ""David"",
    ""age"": 5,
    ""school"": {
        ""name"": ""Highschool"",
        ""location"": ""AZ""
    }
}";

JObject origObj = JObject.Parse(json);
JObject copyObj = new JObject();
foreach (JProperty prop in origObj.Properties())
{
    if (prop.Value.Type != JTokenType.Object &&
        prop.Value.Type != JTokenType.Array)
    {
        copyObj.Add(prop.Name, prop.Value);
    }
}

json = copyObj.ToString();
Console.WriteLine(json);

以上将输出以下内容:

{
  "name": "David",
  "age": 5
}