Xaphann Xaphann - 1 year ago 147
C# Question

JSON add node to an existing JObject

I am trying to add a new node to an existing

, but when I add it does not format correctly. It adds quotes around the entire node, and \ are put in place.

I am loading a
file, doing some logic then adding a node back in. Figured I can do it like this:

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

Problem is that this is the result:

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

I know that my JsonConvert.SerializeObject(MyObject) is working if I do this:

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

The result is this:

"FirstName": "Mike",
"LastName": "Smith"
"FirstName": "Jane",
"LastName": "Doe"

What am I missing?

Following @Swagata Prateek comment of;


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

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

I should note that MyObject is actual
if that makes a difference

Answer Source

Could you kindly try with this?

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

When you are doing JsonConvert.SerializeObject(MyObject) it serializes MyObject and in the process you get a string out of it.

When you assign mainJson.Add("NewNode", JsonConvert.SerializeObject(MyObject)); you're assigning a string to NewNode. Thus you get a quoted string that represents serialized MyObject


JArray.FromObject is the method you'd want to look for if you want to convert your collection to a JArray. In that case the segment would look something like

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