使用现有项将json反序列化为C#列表
鉴于以下类别:
class Report { public Report() { this.Fields=new List(); } [JsonProperty("fields")] public IList Fields { get; private set; } } class Field { [JsonProperty("identifier")] public Guid Identfier { get;set; } [JsonProperty("name")] public string Name { get;set; } }
并设置以下测试方法:
var report = new Report(); report.Fields.Add(new Field { Identifier = new Guid("26a94eab-3d50-4330-8203-e7750abaa060"), Name = "Field 1" }); report.Fields.Add(new Field { Identifier = new Guid("852107db-b5d1-4344-9f71-7bd90b96fec0"), Name = "Field 2" }); var json = "{"fields":[{"identifier":"852107db-b5d1-4344-9f71-7bd90b96fec0","name":"name changed"},{"identifier":"ac424aff-22b5-4bf3-8232-031eb060f7c2","name":"new field"}]}"; JsonConvert.PopulateObject(json, report); Assert.IsTrue(report.Fields.Count == 2, "The number of fields was incorrect.");
如何让JSON.Net知道标识符为“852107db-b5d1-4344-9f71-7bd90b96fec0”的字段应该应用于具有相同标识符的现有字段?
此外,是否可以让JSON.Net删除给定JSON数组中不存在的项目(特别是应删除标识符为“26a94eab-3d50-4330-8203-e7750abaa060”的字段,因为它不存在于给出json数组。
如果有一种方法可以手动编写或覆盖JSON分析列表的方式那么那会更好,因为我可以编写代码来说“这是你需要的项目”或“使用这个新创建的项目”或者只是“不要”我对这个项目做了什么,因为我已经将它删除了“。 任何人都知道我可以这样做的方式吗?
您可以使用选项ObjectCreationHandling = ObjectCreationHandling.Replace
。
您可以使用序列化程序设置为整个数据模型执行此操作,如Json.Net PopulateObject附加列表中所示, 而不是设置值 :
var serializerSettings = new JsonSerializerSettings {ObjectCreationHandling = ObjectCreationHandling.Replace}; JsonConvert.PopulateObject(json, report, serializerSettings);
或者,如果您不想普遍这样做,可以在已经使用的JsonProperty
属性上设置选项:
上述就是C#学习教程:使用现有项将json反序列化为C#列表分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
class Report { public Report() { this.Fields = new List(); } [JsonProperty("fields", ObjectCreationHandling = ObjectCreationHandling.Replace)] public IList Fields { get; private set; } }
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1014714.html