【发布时间】:2020-10-06 18:54:59
【问题描述】:
我正在尝试将新节点添加到现有的 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));
Newtonsoft.Json.dll 中出现“System.ArgumentException”类型的未处理异常
附加信息:对象序列化为 Array。需要 JObject 实例。
我应该注意 MyObject 是实际的 ObservableCollection,如果这有影响的话
【问题讨论】:
-
当您调用
JsonConvert.SerializeObject(MyObject)时,此处的MyObject被序列化为字符串,因此此处的NewNode将自身呈现为引用的字符串。 :)