JSON.NET添加到JArray

前端之家收集整理的这篇文章主要介绍了JSON.NET添加到JArray前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个我要添加的json数组,然后将内容写入文件.我没有问题将内容添加到数组,但使用JsonSerializer.Serialize方法写入文件给了我例外:

ArgumentException的:
无法将Newtonsoft.Json.Linq.JObject添加到Newtonsoft.Json.Linq.JObject.

这发生在我下面的代码的最后一行. “jSerializer.Serialize(o.CreateWriter(),o);”

JSON

  1. {
  2. "ArrayToManipulate":
  3. [
  4. {
  5. "Name":"Value"
  6. },{
  7. "Name":"value"
  8. }
  9. ]
  10. }

用于操作JSON对象的代码

  1. JContainer o = (JObject)JToken.ReadFrom(new JsonTextReader(reader));
  2. JArray x = (JArray)o["ArrayToManipulate"];
  3. ContentObject newObject = new ContentObject(){Name="Value"};
  4. JToken tokenToAdd = JToken.Parse(JsonConvert.SerializeObject(newObject,Formatting.Indented));
  5. x.Add(tokenToAdd);
  6. JsonSerializer jSerializer = new JsonSerializer();
  7. jSerializer.Converters.Add(new Newtonsoft.Json.Converters.StringEnumConverter());
  8. jSerializer.Serialize(o.CreateWriter(),o);

我是以错误的方式来做这件事的吗?

解决方法

通过调用JContainer.CreateWriter获得的编写器不会根据需要写入文件 – 它是写入容器本身的编写器.您需要类似下面的代码 – 基于文件创建“常规”文本编写器,然后基于该文件创建JsonWriter.

  1. const string JSON = "{\"ArrayToManipulate\":[{\"Name\":\"Value\"},{\"Name\":\"value\"}]}";
  2. var reader = new StringReader(JSON);
  3. JContainer o = (JObject)JToken.ReadFrom(new JsonTextReader(reader));
  4. JArray x = (JArray)o["ArrayToManipulate"];
  5. ContentObject newObject = new ContentObject() { Name = "Value" };
  6. JToken tokenToAdd = JToken.Parse(JsonConvert.SerializeObject(newObject,Formatting.Indented));
  7. x.Add(tokenToAdd);
  8. JsonSerializer jSerializer = new JsonSerializer();
  9. jSerializer.Converters.Add(new Newtonsoft.Json.Converters.StringEnumConverter());
  10. using (var w = File.CreateText(@"C:\temp\a.json"))
  11. {
  12. using (var jw = new JsonTextWriter(w))
  13. {
  14. jSerializer.Serialize(jw,o);
  15. }
  16. }

猜你在找的Json相关文章