如何避免 JsonConvert.PopulateObject 在列表中排队

How to avoid JsonConvert.PopulateObject enqueue on lists

我有这个傻class:

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]}";

另外,我有一个愚蠢的class来显示结果:

private void showResult(object theClass)
{
var result = JsonConvert.SerializeObject(theClass);
Debug.WriteLine("result: " + result);
}

现在,我用第一个 json 创建一个 class:

var myPerson = JsonConvert.DeserializeObject<Person>(json1);

一切都很好:class 得到了它应该得到的所有值:

showResult(myPerson);
result: {"Name":"Joe","Surname":"Satriani","Age":40,"NumbersList":[10,20,30]}

现在,我想将第二个 json 应用到已经存在的 class 实例:

JsonConvert.PopulateObject(json2, myPerson);

但是...这就是我得到的:

showResult(myPerson);   
result: {"Name":"Mike","Surname":"Satriani","Age":40,"NumbersList":[10,20,30,40,50,60]}

因此,据我所知,PopulateObject 正确地重写了标准字段属性(因为我没有将“JoeMike”作为名称,我只得到“Mike”,如果没问题的话),但是,它附加了 list/indexed 个,因为我没有获得“40,50,60”,而是“10,20,30,40,50,60”...

所以,我的问题是:有没有办法避免 PopulateObject 故意附加 List/Index/Enumerable 个对象?

JsonSerializerSettings class 中,将 ObjectCreationHandling 值设置为 ObjectCreationHandling.Replace。使用此设置,信息不再附加而是复制。

JsonSerializerSettings jsonSerializerSettings = new JsonSerializerSettings()
{
   ObjectCreationHandling = ObjectCreationHandling.Replace
};
JsonConvert.PopulateObject(json2, myPerson, jsonSerializerSettings);

ObjectCreationHandling setting