【发布时间】:2015-02-15 04:19:10
【问题描述】:
考虑下面的示例程序
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);
Patch() 方法的结果应等于 calendar,除非由 patch 更改。这意味着; Id 将保持不变,CoffeeProvider 将设置为 null,Meetings 将包含位于 Room3 中的单个项目。
如何创建一个通用的
Patch()方法 可反序列化的任何对象(不仅仅是示例 Calendar 对象) Json.NET?如果 (1) 这不可行,有哪些限制可以使其可行以及如何实施?
【问题讨论】:
-
也许我误解了这个问题。你想修改你的对象,还是克隆它并修改克隆?
-
修改实际上在我的场景中效果最好。但是,如果有内置的克隆功能,我也不介意知道如何做到这一点。如果没有内置功能,我可以在修补之前深度克隆对象(例如通过序列化+反序列化)。
-
通过 Json.Net 进行深度克隆是我的建议。用原型更新了答案。
标签: c# json json.net json-deserialization