Betrachten dem unten angegebenen BeispielprogrammModify existierendes Objekt mit neuem Teil JSON Daten mit Json.NET
var calendar = new Calendar
{
Id = 42,
CoffeeProvider = "Espresso2000",
Meetings = new[]
{
new Meeting
{
Location = "Room1",
From = DateTimeOffset.Parse("2014-01-01T00:00:00Z"),
To = DateTimeOffset.Parse("2014-01-01T01:00:00Z")
},
new Meeting
{
Location = "Room2",
From = DateTimeOffset.Parse("2014-01-01T02:00:00Z"),
To = DateTimeOffset.Parse("2014-01-01T03:00:00Z")
},
}
};
var patch = @"{
'coffeeprovider': null,
'meetings': [
{
'location': 'Room3',
'from': '2014-01-01T04:00:00Z',
'to': '2014-01-01T05:00:00Z'
}
]
}";
var patchedCalendar = Patch(calendar, patch);
Das Ergebnis der Patch()
Verfahren soll von patch
zu calendar
außer wie geändert gleich sein. Das bedeutet; Id
wäre unverändert, CoffeeProvider
wäre null
und Meetings
würde einen einzelnen Artikel in Room3 enthalten.
Wie kann man eine allgemeine
Patch()
Methode erstellen, die für jedes Objekt (nicht nur das Beispiel Kalender Objekt) deserializable von Json.NET funktionieren wird?Wenn (1) dies nicht durchführbar ist, welche Beschränkungen wären damit möglich und wie würde es umgesetzt?
Vielleicht habe ich die Frage missverstanden. Möchten Sie Ihr Objekt ändern oder es klonen und den Klon ändern? – dbc
Ändern funktioniert tatsächlich am besten in meinem Szenario. Wenn es jedoch eine eingebaute Funktionalität zum Klonen gibt, würde es mir nichts ausmachen, dies auch zu tun. Wenn keine eingebaute Funktionalität vorhanden ist, könnte ich das Objekt einfach tiefklonen (zum Beispiel durch Serialisierung + Deserialisierung), bevor ich es patche. – Linus
Deep-Cloning über Json.Net ist, was ich vorschlagen würde. Aktualisierte Antwort mit einem Prototyp. – dbc