C# 使用Newtonsoft.Json添加节点层次结构

C# 使用Newtonsoft.Json添加节点层次结构,c#,json,json.net,C#,Json,Json.net,例如,我有一个字符串格式的json {"hello":"Sam"} 例如,我想在根级别添加一个简单的嵌套对象 {"hello":"Sam", "level1":{"level2":{"level3":"myValue"}}} 如何使用Newtonsoft.json以编程方式实现这一点,听起来很简单,但我被卡住了 我尝试过这个,但不知道在“level2节点”写什么: 我可能应该使用下面的Add重载方法,该方法采用“JToken”: 但我不知道这个通用JToken是什么,也不知道如何创建它的实

例如,我有一个字符串格式的json

{"hello":"Sam"}
例如,我想在根级别添加一个简单的嵌套对象

{"hello":"Sam", "level1":{"level2":{"level3":"myValue"}}}
如何使用Newtonsoft.json以编程方式实现这一点,听起来很简单,但我被卡住了

我尝试过这个,但不知道在“level2节点”写什么:

我可能应该使用下面的Add重载方法,该方法采用“JToken”:

但我不知道这个通用JToken是什么,也不知道如何创建它的实例


如果层次结构的add应该是“最里面的第一个,或者最外面的第一个”。

使用无参数构造函数创建一个新的
JObject
。可以按照填充父对象属性的相同方式填充该新子对象:

var json = @"{""hello"":""Sam""}";
var jobj = JObject.Parse(json);

var level2 = new JObject();
level2["level3"] = "myValue";

var level1 = new JObject();
level1["level2"] = level2;

jobj["level1"] = level1;
或者您可以使用,这是可能的,因为
JObject
实现了
System.IEnumerable
,并且有一个方法
Add(String,JToken)


您不必显式地创建
JToken
。它有一长串值类型的
公共静态隐式
强制转换运算符。这些课程写得很好;他们倾向于“按你的意思做”。但是,如果确实需要,可以调用静态方法
JToken.FromObject(objecto)
。在Visual Studio中右键单击JSON.NET类并从上下文菜单中选择“转到定义”,可以学到很多东西。实际上,我在JSON.NET这个领域学到的一切,我在过去十分钟里通过“转到定义”和反复试验学到的

使用无参数构造函数创建一个新的
JObject
。可以按照填充父对象属性的相同方式填充该新子对象:

var json = @"{""hello"":""Sam""}";
var jobj = JObject.Parse(json);

var level2 = new JObject();
level2["level3"] = "myValue";

var level1 = new JObject();
level1["level2"] = level2;

jobj["level1"] = level1;
或者您可以使用,这是可能的,因为
JObject
实现了
System.IEnumerable
,并且有一个方法
Add(String,JToken)


您不必显式地创建
JToken
。它有一长串值类型的
公共静态隐式
强制转换运算符。这些课程写得很好;他们倾向于“按你的意思做”。但是,如果确实需要,可以调用静态方法
JToken.FromObject(objecto)
。在Visual Studio中右键单击JSON.NET类并从上下文菜单中选择“转到定义”,可以学到很多东西。实际上,我在JSON.NET这个领域学到的一切,我在过去十分钟里通过“转到定义”和反复试验学到的

请显示您尝试的内容。如果它已经是字符串格式,只需将level1对象字符串化,然后连接字符串。“连接字符串”?这不是库帮助您的吗?请展示您尝试过的内容。如果它已经是字符串格式,只需将level1对象字符串化,然后连接字符串。“连接字符串”?这不是图书馆帮助你的吗?
var json = @"{""hello"":""Sam""}";
var jobj = JObject.Parse(json);

jobj["level1"] = new JObject
    {
        { "level2", new JObject
            {
                { "level3", "myValue" }
            }
        }
    };