使用Json.NET用新的部分JSON数据修改现有对象

使用Json.NET用新的部分JSON数据修改现有对象,第1张

使用Json.NET用新的部分JSON数据修改现有对象

您想要

JsonSerializer.Populate()
它的静态包装器方法
JsonConvert.PopulateObject()

将JSON值填充到目标对象上。

例如,这里正在更新您的

Calendar
类的实例:

public static class TestPopulate{    public static void Test()    {        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'        }    ]}";        Patch(calendar, patch);        Debug.WriteLine(JsonConvert.SerializeObject(calendar, Formatting.Indented));    }    public static void Patch<T>(T obj, string patch)    {        var serializer = new JsonSerializer();        using (var reader = new StringReader(patch))        { serializer.Populate(reader, obj);        }    }}

产生的调试输出为:

{  "id": 42,  "coffeeprovider": null,  "meetings": [    {      "location": "Room3",      "from": "2014-01-01T04:00:00+00:00",      "to": "2014-01-01T05:00:00+00:00"    }  ]}

更新资料

如果要先复制,则可以执行以下 *** 作:

    public static T CopyPatch<T>(T obj, string patch)    {        var serializer = new JsonSerializer();        var json = JsonConvert.SerializeObject(obj);        var copy = JsonConvert.DeserializeObject<T>(json);        using (var reader = new StringReader(patch))        { serializer.Populate(reader, copy);        }        return copy;    }


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5652083.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-16
下一篇2022-12-16

发表评论

登录后才能评论

评论列表(0条)

    保存