Verfügt C # über eine Bibliothek zum Parsen von JSON-Kaskaden mit mehreren Ebenen?
Gibt es eine Bibliothek (C # bevorzugt), um das aufzulösen, was ich als mehrstufiges kaskadierendes JSON bezeichnen würde?
Hier ist ein Beispiel für das, was ich meine: (Pseudocode / C #)
var json1 = @"{
""firstName"": ""John"",
""lastName"": ""Smith""
}";
var json2 = @"{
""firstName"": ""Albert""
}";
var json3 = @"{
""phone"": ""12345""
}";
var cascadingJSON = JSON.Cascade(json1, json2, json3);
Ergebni (Gleiches Verhalten wie CSS)
{
"firstName"": "Albert", /*Overridden*/
"lastName"": "Smith", /*Inherited*/
"phone"": "12345" }"; /*Added*/
}
Edit 1 - Komplexeres Beispiel
const string json1 =
@"{
""firstName"": ""John"",
""lastName"": ""Smith"",
""age"": 25,
""address"":
{
""streetAddress"": ""21 2nd Street"",
""city"": ""New York"",
""state"": ""NY"",
""postalCode"": ""10021""
},
""phoneNumber"":
[
{
""type"": ""home"",
""number"": ""212 555-1234""
},
{
""type"": ""fax"",
""number"": ""646 555-4567""
}
]
}";
const string json2 =
@"{
""firstName"": ""John2"",
""lastName"": ""robert"",
""age"": 25,
""address"":
{
""state"": ""FL"",
},
""phoneNumber"":
[
{
""type"": ""fax"",
""number"": ""222 222-2222""
},
{
""type"": ""iphone"",
""number"": ""111 111-1111""
}
]
}";
const string json3 =
@"{
""firstName"": ""John3"",
""father"": ""guy""
}";
const string expectedResult =
@"{
""firstName"": ""John3"",
""lastName"": ""robert"",
""age"": 25,
""father"": ""guy"",
""address"":
{
""streetAddress"": ""21 2nd Street"",
""city"": ""New York"",
""state"": ""FL"",
""postalCode"": ""10021""
},
""phoneNumber"":
[
{
""type"": ""home"",
""number"": ""212 555-1234""
},
{
""type"": ""fax"",
""number"": ""222 222-2222""
},
{
""type"": ""iphone"",
""number"": ""111 111-1111""
}
]
}";
Edit 2
Nachdem ich ein bisschen über die Anforderungen nachgedacht habe, sehe ich, dass das komplexere Beispiel niemals so funktionieren könnte, wie es ist. Die Cascading-Funktion kann nicht erkennen, ob beispielsweise eine bestimmte Telefonnummer geändert wurde oder ob es sich um eine neue handelt. Damit dies funktioniert, sollte jede Unterentität einen eindeutigen Bezeichner haben.