如何避免 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);
我有这个傻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);