json.net – 在JsonConverter的ReadJson方法中使用的existingVal
发布时间:2020-12-16 19:48:54 所属栏目:百科 来源:网络整理
导读:当创建自定义Json Converter时,需要覆盖的方法之一是: public override object ReadJson(JsonReader reader,Type objectType,object existingValue,JsonSerializer serializer) 什么是“existingValue”参数?变量名称“existingValue”在这种情况下是什么
当创建自定义Json Converter时,需要覆盖的方法之一是:
public override object ReadJson(JsonReader reader,Type objectType,object existingValue,JsonSerializer serializer) 什么是“existingValue”参数?变量名称“existingValue”在这种情况下是什么意思?
简单地说,existingValue参数给出了最终将被ReadJson方法返回的值替换的对象的现有或默认值.这使得ReadJson方法有机会在确定要返回的内容时评估现有值.例如,该方法可以决定保留默认值,或者如果需要,则以某种方式将其与读取器的反序列化值组合.
请考虑以下示例.该转换器将反序列化JSON中的整数值,并返回该值的总和和反序列化的字段的现有值. class AdditiveIntConverter : JsonConverter { public override bool CanConvert(Type objectType) { return (objectType == typeof(int)); } public override object ReadJson(JsonReader reader,JsonSerializer serializer) { JToken token = JToken.Load(reader); return (int)existingValue + token.ToObject<int>(); } public override void WriteJson(JsonWriter writer,object value,JsonSerializer serializer) { throw new NotImplementedException(); } } 现在我们假设我们有一个Foo类,它有两个int属性Value1和Value2,它们都使用这个转换器. Value1在构造函数中被分配了一个默认值42,而Value2的默认值为零. class Foo { [JsonConverter(typeof(AdditiveIntConverter))] public int Value1 { get; set; } [JsonConverter(typeof(AdditiveIntConverter))] public int Value2 { get; set; } public Foo() { Value1 = 42; } } 如果我们反序列化一些数据到这个类… class Program { static void Main(string[] args) { string json = @"{ ""Value1"" : 18,""Value2"" : 33 }"; Foo foo = JsonConvert.DeserializeObject<Foo>(json); Console.WriteLine("Value1: " + foo.Value1); Console.WriteLine("Value2: " + foo.Value2); } } …我们得到以下结果: Value1: 60 Value2: 33 当然这只是个例子.实际上,在实现JsonConverter时,没有太多需要使用existingValue参数,并且大部分时间其值将为null或零.你可以安全地忽略它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |