将JObject添加到JObject

时间:2018-01-09 12:58:15

标签: c# json linq json.net

我有一个像这样的json结构:



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




我想添加一个新的空对象,例如"报告":{}到json

我的C#代码是这样的:

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

但它给了我一个例外:无法将Newtonsoft.Json.Linq.JValue添加到Newtonsoft.Json.Linq.JObject

那么,如何将新的空JObject添加到json

提前致谢

3 个答案:

答案 0 :(得分:13)

您收到此错误是因为您尝试使用字符串构造JObject(将其转换为JValue)。对于此事,JObject不能直接包含JValue,也不能包含其他JObject;它只能包含JProperties(反过来可以包含其他JObjectsJArraysJValues

要使其正常工作,请将第二行更改为:

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

工作演示:https://dotnetfiddle.net/cjtoJn

答案 1 :(得分:2)

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

Newtonsoft正在使用更直接的方法,您可以通过方括号[]访问任何属性。您只需设置JObject,必须根据Newtonsoft细节创建。

完整代码:

var json = JObject.Parse(@"
{
    ""report"": {},
    ""expense"": {},
    ""invoices"": {},
    ""settings"": {
        ""users"" : {}
    },
}");

Console.WriteLine(json.ToString());

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

Console.WriteLine(json.ToString());

输出:

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

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

作为参考,您可以查看以下链接:https://www.newtonsoft.com/json/help/html/ModifyJson.htm

答案 2 :(得分:1)

另一个例子

flatmap