Newtonsoft.Json 之HtmlEncodeConverter

 /// <summary>
    /// html編碼序列化轉換器
    /// </summary>
    public class HtmlEncodeConverter : JsonConverter
    {
        //是否開啓自定義反序列化,值爲true時,反序列化時會走ReadJson方法,值爲false時,不走ReadJson方法,而是默認的反序列化
        public override bool CanRead => false;
        //是否開啓自定義序列化,值爲true時,序列化時會走WriteJson方法,值爲false時,不走WriteJson方法,而是默認的序列化
        public override bool CanWrite => true;

        public override bool CanConvert(Type objectType)
        {
            return typeof(string) == objectType || objectType.IsClass;
        }

        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            throw new NotImplementedException();
        }

        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
        {
            if (value == null)
            {
                writer.WriteNull();
            }
            else
            {
                Type type = value.GetType();
                if (type == typeof(string))
                {
                    writer.WriteValue(HttpUtility.HtmlEncode(value));
                }
                else if (type.IsClass)
                {
                    JObject jo = new JObject();
                    foreach (PropertyInfo prop in type.GetProperties())
                    {
                        if (prop.CanRead)
                        {
                            object propVal = prop.GetValue(value, null);
                            if (propVal != null)
                            {
                                if (propVal.GetType() == typeof(string))
                                {
                                    jo.Add(prop.Name, JToken.FromObject(System.Web.HttpUtility.HtmlEncode(propVal), serializer));
                                }
                                else
                                {
                                    jo.Add(prop.Name, JToken.FromObject(propVal, serializer));
                                }
                            }
                        }
                    }
                    jo.WriteTo(writer);
                }
                else
                {
                    writer.WriteValue(value); 
                }
            }
        }
    } 
View Code

 

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