JSON.NET 添加到 JArray

4
我有一个json数组需要添加内容,然后将其写入文件。我可以轻松地将内容添加到该数组中,但是使用JsonSerializer.Serialize方法写入文件时会出现异常:
ArgumentException: 无法将Newtonsoft.Json.Linq.JObject添加到Newtonsoft.Json.Linq.JObject。
这发生在下面代码的最后一行上:"jSerializer.Serialize(o.CreateWriter(), o);"
JSON
{
"ArrayToManipulate":
[
    {
        "Name":"Value"
    },
    {
        "Name":"value"
    }
]
}

操作JSON对象的代码

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

我是不是在错误的方式下处理这个问题?

1个回答

1
通过调用JContainer.CreateWriter获取的写入器并不像您想象的那样将内容写入文件 - 它是一个写入器,用于将内容写入容器本身。您需要类似下面的代码 - 基于文件创建一个“普通”的文本写入器,然后再基于它创建一个JsonWriter
const string JSON = "{\"ArrayToManipulate\":[{\"Name\":\"Value\"},{\"Name\":\"value\"}]}";
var reader = new StringReader(JSON);
JContainer o = (JObject)JToken.ReadFrom(new JsonTextReader(reader));
JArray x = (JArray)o["ArrayToManipulate"];
ContentObject newObject = new ContentObject() { Name = "Value" };
JToken tokenToAdd = JToken.Parse(JsonConvert.SerializeObject(newObject, Formatting.Indented));
x.Add(tokenToAdd);
JsonSerializer jSerializer = new JsonSerializer();
jSerializer.Converters.Add(new Newtonsoft.Json.Converters.StringEnumConverter());
using (var w = File.CreateText(@"C:\temp\a.json"))
{
    using (var jw = new JsonTextWriter(w))
    {
        jSerializer.Serialize(jw, o);
    }
}

如何从_a.json文件_中进行反序列化? - Kiquenet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接