如果反序列化时json中不存在旧值,请保留旧值



我有这样一个类:

public class item
{
    public string Name { get; set; }
    public string City { get; set; }
    public string Pw { get; set; }
}

我从中创建了几个存储在数据库中的对象。然后我想用来自客户端的数据以json的形式更新其中一个:

{  
   "Name":"John",
   "City":"NYC"
}

这个想法是使用:

item myitem = JsonConvert.DeserializeObject<item>(jsoncomingfromclient);

但是这样做Pw会被null覆盖(而显然我想保持原始值)

NullValueHandling看起来是一个很好的候选者,但如果值为null,它就可以工作,在我的情况下,json中完全没有它。如果json中缺少旧值,你知道如何反序列化json吗?

使用JsonConvert.PopulateObject。它是为这个目的而设计的:

        var item = new item { Name = "my name", City = "my city", Pw = "my pw" };
        var json = @"
        {  
           ""Name"":""John"",
           ""City"":""NYC""
        }";
        JsonConvert.PopulateObject(json, item);
        Debug.Assert(item.Pw == "my pw"); // no assert
        Debug.Assert(item.Name == "John"); // no assert
        Debug.Assert(item.City == "NYC"); // no assert

这部分代码JsonConvert.DeserializeObject<item>(jsoncomingfromclient);将基于参数jsoncomingfromclient创建类型为item的新实例并返回。

该部分item myitem = ...声明了一个类型为item的变量myitem,并为其提供了一个具体实例。所以没有办法合并这样的东西。

您只需要手动编写一些合并方法,并定义两个对象之间的合并内容和方式。


类似的东西

item dbitem = ...
item myitem = JsonConvert.DeserializeObject<item>(jsoncomingfromclient);
item mergedItem = myitem.merge(dbitem)

相关内容

  • 没有找到相关文章