C# 如何使用json.net创建所需的json
我试图在下面使用JSON.Net创建这个JSON,但是我收到了一个错误 无法将Newtonsoft.Json.Linq.JProperty添加到Newtonsoft.Json.Linq.JArray 我能够得到输出直到“cpu”,但我不能创建涉及阵列的“磁盘” 我正在尝试制作的JSON:C# 如何使用json.net创建所需的json,c#,json.net,C#,Json.net,我试图在下面使用JSON.Net创建这个JSON,但是我收到了一个错误 无法将Newtonsoft.Json.Linq.JProperty添加到Newtonsoft.Json.Linq.JArray 我能够得到输出直到“cpu”,但我不能创建涉及阵列的“磁盘” 我正在尝试制作的JSON: { "spec":{ "name":"SampleVM", "cpu":{ "hot_remove_enabled":true, "count":1,
{
"spec":{
"name":"SampleVM",
"cpu":{
"hot_remove_enabled":true,
"count":1,
"hot_add_enabled":true,
"cores_per_socket":1
},
"disks":[
{
"new_vmdk":{
"capacity":1024
}
}
]
}
}
我的代码
JObject-newjson=
新作业项目(
新的JProperty(“规范”,
新JProperty(“名称”、“SampleVM”),
新JProperty(“cpu”,新作业对象
{
新JProperty(“热删除启用”,true),
新产权(“计数”,1),
新JProperty(“热添加已启用”,true),
新JProperty(“每个插座的芯数”,1)
}),
新JProperty(“磁盘”,新JArray(
新作业项目
{
新JProperty(“新_vmdk”,新作业对象{
新JProperty(“容量”,1024)
})
}
))));
为了获得与JSON完全相同的输出,我可以在代码中更改什么?我的问题主要在于尝试重新创建具有阵列的“磁盘”JProperty。您的问题在于:
new JObject(
new JProperty("spec",
new JProperty("name","SampleVM"),
new JProperty("cpu", // Remainder omitted.
这里要做的是将多个JProperty
对象添加到JProperty
。属性不能将属性作为子级,只有对象才能将属性作为子级
您可能希望将这些嵌套属性封装在对象中,如下所示:
var newjson =
new JObject(
new JProperty("spec",
new JObject(
new JProperty("name","SampleVM"),
new JProperty("cpu",new JObject
{
new JProperty("hot_remove_enabled",true),
new JProperty("count",1),
new JProperty("hot_add_enabled",true),
new JProperty("cores_per_socket",1)
}),
new JProperty("disks", new JArray(
new JObject
{
new JProperty("new_vmdk",new JObject{
new JProperty("capacity",1024)
})
}
)))));
演示小提琴
注:
- 错误消息无法将Newtonsoft.Json.Linq.JProperty添加到Newtonsoft.Json.Linq.JArray中,这似乎是因为您试图将多个属性添加到属性中,在这种情况下,
构造函数假定由于传入了一个集合,一个JProperty
应该由传入的参数组成——并且失败,因为这些参数都是JArray
类型 如果我只向属性添加一个属性,如下所示:JProperty
我收到一条误导性较小的消息,无法将Newtonsoft.Json.Linq.JProperty添加到Newtonsoft.Json.Linq.JProperty。演示小提琴2new JObject( new JProperty("spec", new JProperty("name","SampleVM") ) );
- 您的问题在于:
new JObject(
new JProperty("spec",
new JProperty("name","SampleVM"),
new JProperty("cpu", // Remainder omitted.
这里要做的是将多个JProperty
对象添加到JProperty
。属性不能将属性作为子级,只有对象才能将属性作为子级
您可能希望将这些嵌套属性封装在对象中,如下所示:
var newjson =
new JObject(
new JProperty("spec",
new JObject(
new JProperty("name","SampleVM"),
new JProperty("cpu",new JObject
{
new JProperty("hot_remove_enabled",true),
new JProperty("count",1),
new JProperty("hot_add_enabled",true),
new JProperty("cores_per_socket",1)
}),
new JProperty("disks", new JArray(
new JObject
{
new JProperty("new_vmdk",new JObject{
new JProperty("capacity",1024)
})
}
)))));
演示小提琴
注:
- 错误消息无法将Newtonsoft.Json.Linq.JProperty添加到Newtonsoft.Json.Linq.JArray中,这似乎是因为您试图将多个属性添加到属性中,在这种情况下,
构造函数假定由于传入了一个集合,一个JProperty
应该由传入的参数组成——并且失败,因为这些参数都是JArray
类型 如果我只向属性添加一个属性,如下所示:JProperty
我收到一条误导性较小的消息,无法将Newtonsoft.Json.Linq.JProperty添加到Newtonsoft.Json.Linq.JProperty。演示小提琴2new JObject( new JProperty("spec", new JProperty("name","SampleVM") ) );