如何使用json.net创建所需的json

我正在尝试使用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 =
    new JObject(
        new JProperty("spec",new JProperty("name","SampleVM"),new JProperty("cpu",new JObject
            { 
            new JProperty("hot_remove_enabled",true),new JProperty("count",1),new JProperty("hot_add_enabled",new JProperty("cores_per_socket",1)
            }),new JProperty("disks",new JArray(
                new JObject
                {
                    new JProperty("new_vmdk",new JObject{
                        new JProperty("capacity",1024)
                    })
                }
                ))));

我可以在代码中进行哪些更改以获取与JSON完全相同的输出?我的问题主要在于尝试重新创建具有数组的“磁盘” JProperty。

zhang9987 回答:如何使用json.net创建所需的json

您的问题在这里:

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",new JObject
                                    { 
                                        new JProperty("hot_remove_enabled",true),new JProperty("count",1),new JProperty("hot_add_enabled",new JProperty("cores_per_socket",1)
                                    }),new JProperty("disks",new JArray(
                          new JObject
                          {
                              new JProperty("new_vmdk",new JObject{
                                  new JProperty("capacity",1024)
                              })
                          }
                      )))));    

演示小提琴here

注意:

  • 误导性错误消息无法将Newtonsoft.Json.Linq.JProperty添加到Newtonsoft.Json.Linq.JArray 似乎是由于您试图添加一个属性的多个属性,在这种情况下,JProperty构造函数假设由于传入了一个集合,因此JArray应该由传入的参数组成-失败,因为这些参数均为JProperty类型。

    如果我仅将一个属性添加到这样的属性中:

    new JObject(
        new JProperty("spec","SampleVM")
                     )
    );
    

    我得到的消息较少误导无法将Newtonsoft.Json.Linq.JProperty添加到Newtonsoft.Json.Linq.JProperty。演示小提琴#2 here

本文链接:https://www.f2er.com/3138819.html

大家都在问