Search code examples
c#jsonlinqjson.net

Add JObject to JObject


I have a json structure like this:

var json = 
{
  "report": {},
  "expense": {},
  "invoices": {},
  "projects": {},
  "clients": {},
  "settings": {
    "users": {},
    "companies": {},
    "templates": {},
    "translations": {},
    "license": {},
    "backups": {},
  }
}

I would like to add a new empty Object like "report":{} to the json

My C# code is like this:

JObject json = JObject.Parse(File.ReadAllText("path"));
json.Add(new JObject(fm.Name));

But it it gives me a exception:

Can not add Newtonsoft.Json.Linq.JValue to Newtonsoft.Json.Linq.JObject

So, how can I add a new and empty JObject to the json

Thanks in advance


Solution

  • 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