C# 如何使用json.net创建所需的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,

我试图在下面使用JSON.Net创建这个JSON,但是我收到了一个错误

无法将Newtonsoft.Json.Linq.JProperty添加到Newtonsoft.Json.Linq.JArray

我能够得到输出直到“cpu”,但我不能创建涉及阵列的“磁盘”

我正在尝试制作的JSON:

{
  "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
    类型

    如果我只向属性添加一个属性,如下所示:

    new JObject(
        new JProperty("spec", 
                      new JProperty("name","SampleVM")
                     )
    );
    
    我收到一条误导性较小的消息,无法将Newtonsoft.Json.Linq.JProperty添加到Newtonsoft.Json.Linq.JProperty。演示小提琴2

    • 您的问题在于:

      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
        类型

        如果我只向属性添加一个属性,如下所示:

        new JObject(
            new JProperty("spec", 
                          new JProperty("name","SampleVM")
                         )
        );
        
        我收到一条误导性较小的消息,无法将Newtonsoft.Json.Linq.JProperty添加到Newtonsoft.Json.Linq.JProperty。演示小提琴2