手动创建 JSON

Create JSON manually

我有一个 JSON,例如,它看起来像这样:

{
   "value":[
      {
         "Name":"Nik",
         "Age":"17",
         "Country":"Germany",
      },
      {
         "Name":"Tom",
         "Age":"20",
         "Country":"Russia",
      },
      {
         "Name":"Sila",
         "Age":"12",
         "Country":"Switzerland",

      }
   ]
}

“姓名”和“年龄”等属性的键是动态的,可以变化。 JSON 也可以是这样的:

{
   "value":[
      {
         "Prename":"Nik",
         "Age":"17",
         "Country":"Germany"
         "Car":"Merc"
      },
      {
         "Prename":"Nik",
         "Age":"20",
         "Country":"Russia"
         "Car":"BMW"
      },
      {
         "Prename":"Nik",
         "Age":"12",
         "Country":"Switzerland",
         "Car":"Audi"
      }
   ]
}

重要的是结构,这是我想用 Newtonsoft.Json 手动构建的。

这是我目前的尝试:

var jArray = new JArray();
jArray.Add("Name");
jArray.Add("Nikola");

jArray.Add("Age");
jArray.Add("17");

jArray.Add("Country");
jArray.Add("Germany");

JObject o = new JObject();
o["Value"] = jArray;

string json = o.ToString();

结果:

{
  "Value": [
    "Name",
    "Nikola",
    "Age",
    "17",
    "Country",
    "Germany"
  ]
}

我尝试使用 newtonsoft 网站上的 this example 来解决它,但如您所见,它的解释非常糟糕。

如果您想动态构造对象,可以使用字典:

var jsonObj = new Dictionary<string, List<Dictionary<string, string>>>
{
    {
        "Value", new List<Dictionary<string, string>>
        {
            new Dictionary<string, string>
            {
                {"Prename", "Nik"},
                {"Age", "17"},
                {"Country", "Germany"},
                {"Car", "Merc"}
            },
            new Dictionary<string, string>
            {
                {"Prename", "Nik"},
                {"Age", "20"},
                {"Country", "Russia"},
                {"Car", "BMW"}
            },
            new Dictionary<string, string>
            {
                {"Prename", "Nik"},
                {"Age", "12"},
                {"Country", "Switzerland"},
                {"Car", "Audi"}
            }
        }
    }
};
var json = JsonConvert.SerializeObject(jsonObj);
Console.WriteLine(json);

您可以考虑从匿名对象创建它,如下所示:

JObject o = JObject.FromObject(new
{
    value = new [] {
        new {
            Name = "Nik",
            Age = "17",
            Country = "Germany"
        },

        new {
            Name = "Nik1",
            Age = "18",
            Country = "Austria"
        },
    }
});

string json = o.ToString();

它产生这个结果:

{
  "value": [
    {
      "Name": "Nik",
      "Age": "17",
      "Country": "Germany"
    },
    {
      "Name": "Nik1",
      "Age": "18",
      "Country": "Austria"
    }
  ]
}

您需要像这样将 JObject 添加到数组中。我想你将不得不添加你想要的任何条件属性(或其他嵌套对象)

var jArray = new JArray();
var nik = new JObject();
nik["Name"] = "nik";
nik["Age"] = "17";
nik["Country"] ="Germany";

jArray.Add(nik);
JObject o = new JObject();
o["Value"] = jArray;

string json = o.ToString();

根据动态内容的确切性质,您可以使用像

这样的初始化代码
    var jArray = new JArray
    {
        new JObject {["Name"] = "nik", ["Age"] = "17", ["Country"] = "Germany"},
        new JObject {["Name"] = "bob", ["Age"] = "32", ["Country"] = "New Zealand"}
    };
    var o = new JObject {["Value"] = jArray};

我相信您要实现的确切结构是:

    //New Json Array
    var manualJSON = new JArray();

    //Add Nik
    var NIK = new JObject();
    NIK["Name"] = "Nik";
    NIK["Age"] = "17";
    NIK["Country"] = "Germany";

    //Add Tom
    var Tom = new JObject();
    Tom["Name"] = "Tom";
    Tom["Age"] = "20";
    Tom["Country"] = "Russia";
    
    //Add People to Json Array
    manualJSON.Add(Tom);
    manualJSON.Add(NIK);

    //Pass your json to a new object to print
    JObject o = new JObject();
    o["value"] = manualJSON;

    //Live Testing
    string json = o.ToString();
    File.WriteAllText("test.txt", json);
    Process.Start("test.txt");