/// <summary> /// 自定義數值類型序列化轉換器 /// </summary> public class DecimalDigitsConvert : JsonConverter { //是否開啓自定義反序列化,值爲true時,反序列化時會走ReadJson方法,值爲false時,不走ReadJson方法,而是默認的反序列化 public override bool CanRead => false; //是否開啓自定義序列化,值爲true時,序列化時會走WriteJson方法,值爲false時,不走WriteJson方法,而是默認的序列化 public override bool CanWrite => true; /// <summary> /// 序列化後保留小數位數 /// </summary> public virtual int? Digits { get; private set; } /// <summary> /// 構造函數 /// </summary> public DecimalDigitsConvert() { } /// <summary> /// 構造函數 /// </summary> /// <param name="digits">序列化後保留小數位數</param> public DecimalDigitsConvert(int digits) { this.Digits = digits; } public override bool CanConvert(Type objectType) { return objectType == typeof(decimal) || objectType == typeof(Nullable<decimal>); } public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { throw new NotImplementedException(); } /// <summary> /// 重載序列化方法 /// </summary> /// <param name="writer"></param> /// <param name="value"></param> /// <param name="serializer"></param> public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { if (value == null) { writer.WriteNull(); } else { if (Digits.HasValue) { string.Format("{0:N" + Digits + "}", value); } else { writer.WriteValue(value.ToString()); } } } }