gpt4 book ai didi

c# - JSON 添加节点到现有的 JObject

转载 作者:太空狗 更新时间:2023-10-30 01:15:11 40 4
gpt4 key购买 nike

我正在尝试向现有的 JSON JObject 添加一个新节点,但是当我添加时它的格式不正确。它在整个节点周围添加引号,并将\放在适当的位置。

背景:我正在加载一个 JSON 文件,执行一些逻辑然后重新添加一个节点。我想我可以这样做:

mainJson.Add("NewNode", JsonConvert.SerializeObject(MyObject));
File.WriteAllText("myfile.json", mainJson.ToString());

问题是这是结果:

{
"JSONFile": [
{
"More": "Nodes",
"InThe": "File"
}
],
"Customers": "{\"FirstName\":\"Mike\",\"LastName\":\"Smith\"},{\"FirstName\":\"Jane\",\"LastName\":\"Doe\"}",
}

如果我这样做,我知道我的 JsonConvert.SerializeObject(MyObject) 正在工作:

string json = JsonConvert.SerializeObject(MyObject);
File.WriteAllText("myfile2.json" json);

结果是这样的:

[
{
"FirstName": "Mike",
"LastName": "Smith"
},
{
"FirstName": "Jane",
"LastName": "Doe"
}
]

我错过了什么?

编辑:关注@Swagata Prateek 的评论;

mainJson.Add("Customers",JObject.FromObject(MyObject));

An unhandled exception of type 'System.ArgumentException' occurred in Newtonsoft.Json.dll

Additional information: Object serialized to Array. JObject instance expected.

我应该注意到 MyObject 是实际的 ObservableCollection 如果有区别的话

最佳答案

你能试试这个吗?

mainJson.Add("NewNode", JObject.FromObject(MyObject));
File.WriteAllText("myfile.json", mainJson.ToString());

当您执行 JsonConvert.SerializeObject(MyObject) 时,它会序列化 MyObject 并在此过程中从中获取一个字符串。

当您分配 mainJson.Add("NewNode", JsonConvert.SerializeObject(MyObject)); 时,您是在将字符串分配给 NewNode。因此,您会得到一个带引号的字符串,表示序列化的 MyObject

更新:

JArray.FromObject 是您想要将集合转换为 JArray 时需要寻找的方法。在那种情况下,该段看起来像

mainJson.Add("NewNode", JArray.FromObject(obsColl));
File.WriteAllText("myfile.json", mainJson.ToString());

关于c# - JSON 添加节点到现有的 JObject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39352140/

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