自定义JsonConverter,可以将decimal.MinValue转换为空字符串并返回
我需要为旧系统创建一个自定义JSON.NET转换器,用于标记空小数值…
var nulldec = decimal.MinValue;
(这是在引入可空类型之前创建的,并且改变它的工作方式将是大量的工作。)
当这些min值被序列化为JSON时,它们需要被序列化为空字符串。 当它们被反序列化时,如果值为空字符串,则需要转换为decimal.MinValue
。
这是我到目前为止(是的,不多)。 我认为这是一个简单的转换,但我没有看到任何文章指出我如何为我的情况工作,也没有任何关于如何创建自定义转换器的文档。 有人可以帮忙吗?
public class DecimalJsonConverter : JsonConverter { public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { } public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { } public override bool CanConvert(Type objectType) { return typeof(System.Decimal).IsAssignableFrom(objectType); } }
以下转换器实现应该为您提供您想要的:
public class DecimalJsonConverter : JsonConverter { public override bool CanConvert(Type objectType) { return (objectType == typeof(decimal)); } public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { if (reader.TokenType == JsonToken.String) { if ((string)reader.Value == string.Empty) { return decimal.MinValue; } } else if (reader.TokenType == JsonToken.Float || reader.TokenType == JsonToken.Integer) { return Convert.ToDecimal(reader.Value); } throw new JsonSerializationException("Unexpected token type: " + reader.TokenType.ToString()); } public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { decimal dec = (decimal)value; if (dec == decimal.MinValue) { writer.WriteValue(string.Empty); } else { writer.WriteValue(dec); } } }
这是一个往返演示:
class Program { static void Main(string[] args) { string json = @" { ""MinValueAsString"" : """", ""ARealDecimal"" : 3.14159, ""AnInteger"" : 42 }"; JsonSerializerSettings settings = new JsonSerializerSettings(); settings.Converters.Add(new DecimalJsonConverter()); settings.Formatting = Formatting.Indented; Foo foo = JsonConvert.DeserializeObject(json, settings); Console.WriteLine("MinValueAsString: " + foo.MinValueAsString); Console.WriteLine("ARealDecimal: " + foo.ARealDecimal); Console.WriteLine("AnInteger: " + foo.AnInteger); Console.WriteLine(); json = JsonConvert.SerializeObject(foo, settings); Console.WriteLine(json); } class Foo { public decimal MinValueAsString { get; set; } public decimal ARealDecimal { get; set; } public decimal AnInteger { get; set; } } }
输出:
MinValueAsString: -79228162514264337593543950335 ARealDecimal: 3.14159 AnInteger: 42 { "MinValueAsString": "", "ARealDecimal": 3.14159, "AnInteger": 42.0 }
小提琴: https : //dotnetfiddle.net/dip85r
上述就是C#学习教程:自定义JsonConverter,可以将decimal.MinValue转换为空字符串并返回分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1013963.html