Add JObject to JObject Add JObject to JObject json json

Add JObject to JObject


You are getting this error because you are trying to construct a JObject with a string (which gets converted into a JValue). A JObject cannot directly contain a JValue, nor another JObject, for that matter; it can only contain JProperties (which can, in turn, contain other JObjects, JArrays or JValues).

To make it work, change your second line to this:

json.Add(new JProperty(fm.Name, new JObject()));

Working demo: https://dotnetfiddle.net/cjtoJn


One more example

var jArray = new JArray {    new JObject    {        new JProperty("Property1",            new JObject            {                new JProperty("Property1_1", "SomeValue"),                new JProperty("Property1_2", "SomeValue"),            }        ),        new JProperty("Property2", "SomeValue"),    }};


json["report"] = new JObject    {        { "name", fm.Name }    };

Newtonsoft is using more direct-like approach, where You can access any property via square brackets []. You just need to set the JObject, which have to be created based on Newtonsoft specifics.

Full code:

var json = JObject.Parse(@"{    ""report"": {},    ""expense"": {},    ""invoices"": {},    ""settings"": {        ""users"" : {}    },}");Console.WriteLine(json.ToString());json["report"] = new JObject    {        { "name", fm.Name }    };Console.WriteLine(json.ToString());

Output:

{  "report": {},  "expense": {},  "invoices": {},  "settings": {    "users": {}  }}{  "report": {    "name": "SomeValue"  },  "expense": {},  "invoices": {},  "settings": {    "users": {}  }}

As a reference, You can look at this link: https://www.newtonsoft.com/json/help/html/ModifyJson.htm