如何在每个JSON数组项前显示属性值?

时间:2014-09-29 20:25:11

标签: c# json json.net

这是我正在使用的JSON字符串。

{
  "id": 1,
  "title": "A Test",
  "items": [
    {
      "id": 157,
      "title": "some article",      
      "type": "Article"
    },
    {
      "id": 153,
      "title": "some other article",     
      "type": "Article"
    }
   ]
}

我正在使用Json.Net进行序列化。无论如何我可以在显示之前格式化这样的JSON吗?

{
  "id": 1,
  "title": "A Test",
  "items": [
    "157" : {
      "title": "some article",      
      "type": "Article"
    },
    "153" : {
      "title": "some other article",     
      "type": "Article"
    }
   ]
}

提前致谢。

1 个答案:

答案 0 :(得分:1)

使用Json.Net的LINQ-to-JSON API(JObjects)来转换原始JSON,您可以非常接近所需的输出。这是一种方法:

public static string Transform(string json)
{
    JObject root = JObject.Parse(json);

    JObject itemsObj = new JObject();

    foreach (JObject item in root["items"])
    {
        JToken id = item["id"];
        id.Parent.Remove();
        itemsObj.Add(id.ToString(), item);
    }

    root["items"].Parent.Remove();
    root.Add("items", itemsObj);

    return root.ToString();
}

如果您将原始JSON传递给此方法,您将获得以下输出:

{
  "id": 1,
  "title": "A Test",
  "items": {
    "157": {
      "title": "some article",
      "type": "Article"
    },
    "153": {
      "title": "some other article",
      "type": "Article"
    }
  }
}

小提琴:https://dotnetfiddle.net/1di41P