首页 > 解决方案 > 如何将 JsonProperty 附加到另一个 JsonProperty

问题描述

我有这个看起来像这样的 JsonDocument

string jsonString = "{\"year\": 0, \"class\": [], \"schools\": []}";
JsonDocument newSchema = JsonDocument.Parse(jsonString)

还有一堆 JSON 文件,其中包含这些属性。每个 JSON 文件都有相同的year内容,但包含一个特定class和一个特定的信息school。旁边没有一个是相同的year

我试图创建一个 JsonDocument,将所有class和学校放在一个 JsonDocument 中,但似乎将 JsonProperty 附加在一起有问题..

这是我到目前为止所尝试的:

using (JsonDocument newSchema = JsonDocument.Parse(jsonString))
{
    List<JsonProperty> properties = new List<JsonProperty>();
    foreach(JsonProperty a in newSchema.RootElement.EnumerateObject())
    {
        properties.Add(a);
    }
    foreach (string classandSchoolDefinition in loadableSchemaDefinitions)
    {

        string schemaDefinitionAsJson = File.ReadAllText(classandSchoolDefinition );
        JsonDocument schemaJson = JsonDocument.Parse(schemaDefinitionAsJson);

        foreach (JsonProperty a in schemaJson.RootElement.EnumerateObject())
        {
            switch (a.Name)
            {
                case "year":
                    Console.WriteLine($@"({a.Name}+{a.Value}, {a.Value.ValueKind})");
                    break;
                case "class":
                    Console.WriteLine($@"({a.Name}+{a.Value}, {a.Value.ValueKind})");
                    break;
                case "school":
                    Console.WriteLine($@"({a.Name}+{a.Value}, {a.Value.ValueKind})");
                    break;
                default:
                    break;
            }
        }
    }

如何将每个Jsonproperty值连接到一个组合newSchema,而不是保持一个?
在这种情况下,我只想将一个数组附加到另​​一个数组。

标签: c#asp.netsystem.text.json

解决方案


您可以使用 Newtonsoft.Json 实现这一目标

例如,您有

var o1 = JObject.Parse(@"{
  'Name': 'Max',
  'Enabled': false,
  'Roles': [ 'User' ]
}");

和另一个对象

var o2 = JObject.Parse(@"{
  'Enabled': true,
  'Roles': [ 'User', 'Admin' ]
}");

只需像这样使用合并功能 -

o1.Merge(o2, new JsonMergeSettings
{
    // to avoid duplicates
    MergeArrayHandling = MergeArrayHandling.Union
});

结果将是 -

{
   "FirstName": "Max",
   "Enabled": true,
   "Roles": [
      "User",
      "Admin"
  ]
}

推荐阅读