我正在尝试向现有节点添加一个新节点JSON JObject,但是当我添加它时,它的格式不正确。它在整个节点周围添加引号,并将 \ 放在适当的位置。
背景:我正在加载一个JSON文件,执行一些逻辑,然后重新添加一个节点。我想我可以这样做:
mainJson.Add("NewNode", JsonConvert.SerializeObject(MyObject));
File.WriteAllText("myfile.json", mainJson.ToString());
Run Code Online (Sandbox Code Playgroud)
问题是结果如下:
{
"JSONFile": [
{
"More": "Nodes",
"InThe": "File"
}
],
"Customers": "{\"FirstName\":\"Mike\",\"LastName\":\"Smith\"},{\"FirstName\":\"Jane\",\"LastName\":\"Doe\"}",
}
Run Code Online (Sandbox Code Playgroud)
如果我这样做,我知道我的 JsonConvert.SerializeObject(MyObject) 正在工作:
string json = JsonConvert.SerializeObject(MyObject);
File.WriteAllText("myfile2.json" json);
Run Code Online (Sandbox Code Playgroud)
结果是这样的:
[
{
"FirstName": "Mike",
"LastName": "Smith"
},
{
"FirstName": "Jane",
"LastName": "Doe"
}
]
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
编辑: 以下@Swagata Prateek 评论;
mainJson.Add("Customers",JObject.FromObject(MyObject));
Run Code Online (Sandbox Code Playgroud)
Newtonsoft.Json.dll 中发生类型为“System.ArgumentException”的未处理异常
附加信息:对象序列化为数组。预期的 JObject 实例。
我应该注意到 MyObject 是实际的,ObservableCollection如果这有所不同
你可以试试这个吗?
mainJson.Add("NewNode", JObject.FromObject(MyObject));
File.WriteAllText("myfile.json", mainJson.ToString());
Run Code Online (Sandbox Code Playgroud)
当你这样做时,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());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10539 次 |
| 最近记录: |