使用LINQ创建JSON的异常

时间:2015-03-20 14:18:17

标签: c# json linq json.net

我正在尝试使用以下代码创建JSON:

        JArray jInner = new JArray("document");
        JProperty jTitle = new JProperty("title", category);
        JProperty jDescription = new JProperty("description", "this is the description");
        JProperty jContent = new JProperty("content", content);
        jInner.Add(jTitle);
        jInner.Add(jDescription);
        jInner.Add(jContent);

当我到达jInner.Add(jTitle)时,我得到以下异常:

System.ArgumentException: Can not add Newtonsoft.Json.Linq.JProperty to Newtonsoft.Json.Linq.JArray.
   at Newtonsoft.Json.Linq.JContainer.ValidateToken(JToken o, JToken existing)
   at Newtonsoft.Json.Linq.JContainer.InsertItem(Int32 index, JToken item, Boolean skipParentCheck)
   at Newtonsoft.Json.Linq.JContainer.AddInternal(Int32 index, Object content, Boolean skipParentCheck)

任何人都可以帮忙告诉我我做错了什么吗?

1 个答案:

答案 0 :(得分:6)

向数组添加属性没有意义。数组由值组成,而不是键/值对。

如果你想要这样的东西:

[ {
  "title": "foo",
  "description": "bar"
} ]

然后你只需要一个中间JObject

JArray jInner = new JArray();
JObject container = new JObject();
JProperty jTitle = new JProperty("title", category);
JProperty jDescription = new JProperty("description", "this is the description");
JProperty jContent = new JProperty("content", content);
container.Add(jTitle);
container.Add(jDescription);
container.Add(jContent);
jInner.Add(container);

请注意,我也从"document"构造函数调用中删除了JArray参数。它不清楚为什么你这样做,但我强烈怀疑你不想要它。 (它会使数组的第一个元素成为字符串"document",这将是相当奇怪的。)