gpt4 book ai didi

JSON.NET 添加到 JArray

转载 作者:行者123 更新时间:2023-12-02 00:13:14 26 4
gpt4 key购买 nike

我有一个想要添加到的 json 数组,然后将内容写入文件。将内容添加到数组中没有问题,但使用 JsonSerializer.Serialize 方法写入文件给了我一个异常(exception):

参数异常:无法将 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);

我的处理方式是否错误?

最佳答案

通过调用 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);
}
}

关于JSON.NET 添加到 JArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20486184/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com