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