栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用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;    }


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/649937.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号