Add JObject to JObject

时间秒杀一切 提交于 2019-12-30 06:00:10

问题


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


回答1:


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




回答2:


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




回答3:


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"),
    }
};


来源:https://stackoverflow.com/questions/48168738/add-jobject-to-jobject

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!