我正在尝试向现有的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));
发生了未处理的类型为'System.ArgumentException'的异常,位于 Newtonsoft.Json.dll 中
附加信息:将对象序列化为数组。需要 JObject 实例。
值得注意的是,如果 MyObject 是实际的 ObservableCollection
,那可能会有所不同。
JsonConvert.SerializeObject(MyObject)
时,这里的MyObject
被序列化为一个字符串,因此NewNode
在这里呈现为一个带引号的字符串。 :) - Swagata Prateek