我有一个像这样的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
提前致谢
答案 0 :(得分:13)
您收到此错误是因为您尝试使用字符串构造JObject
(将其转换为JValue
)。对于此事,JObject
不能直接包含JValue
,也不能包含其他JObject
;它只能包含JProperties
(反过来可以包含其他JObjects
,JArrays
或JValues
。
要使其正常工作,请将第二行更改为:
json.Add(new JProperty(fm.Name, new JObject()));
答案 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