Newtonsoft.Json保留小數Convert

 /// <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());
                }
            }
        }
    }
View Code

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章