【发布时间】:2021-08-05 02:10:06
【问题描述】:
我有这个愚蠢的课程:
public class Person
{
public string Name { get; set; }
public string Surname { get; set; }
public int Age { get; set; }
public List<int> NumbersList { get; set; }
}
我有这两个 json(第二个来自条件序列化槽 ShouldSerialize)
var json1 = "{\"Name\":\"Joe\",\"Surname\":\"Satriani\",\"Age\":40,\"NumbersList\":[10,20,30]}";
var json2= "{\"Name\":\"Mike\",\"NumbersList\":[40,50,60]}";
另外,我有一个愚蠢的类来显示结果:
private void showResult(object theClass)
{
var result = JsonConvert.SerializeObject(theClass);
Debug.WriteLine("result: " + result);
}
现在,我用第一个 json 创建一个类:
var myPerson = JsonConvert.DeserializeObject<Person>(json1);
一切都很好:这个类得到了它应该得到的所有值:
showResult(myPerson);
result: {"Name":"Joe","Surname":"Satriani","Age":40,"NumbersList":[10,20,30]}
现在,我想将第二个 json 应用到已经存在的类实例:
JsonConvert.PopulateObject(json2, myPerson);
但是……这就是我得到的:
showResult(myPerson);
result: {"Name":"Mike","Surname":"Satriani","Age":40,"NumbersList":[10,20,30,40,50,60]}
因此,据我所知,PopulateObject 正确地重写了标准字段属性(因为我没有将“JoeMike”作为名称,所以我只得到“Mike”,如果可以的话),但是,它附加列表/索引的,因为我没有获得“40,50,60”而是“10,20,30,40,50,60”...
所以,我的问题是:有没有办法避免 PopulateObject 故意附加 List/Index/Enumerable 对象?
【问题讨论】:
-
这是一个类似的老问题。也许存在更新的解决方案?但是等等,它可以提供帮助:stackoverflow.com/questions/20270266/…