JSON 添加节点到现有的 JObject

Xap*_*ann 6 c# json json.net

我正在尝试向现有节点添加一个新节点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如果这有所不同

Swa*_*eek 7

你可以试试这个吗?

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)