首页 > 其他分享 > Newtonsoft.Json 之HtmlEncodeConverter

Newtonsoft.Json 之HtmlEncodeConverter

时间:2022-09-30 17:35:09浏览次数:50  
标签:Newtonsoft propVal writer value Json HtmlEncodeConverter override 序列化 public

 /// <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

 

标签:Newtonsoft,propVal,writer,value,Json,HtmlEncodeConverter,override,序列化,public
From: https://www.cnblogs.com/5tomorrow/p/16745623.html

相关文章

  • Jmeter 使用json提取器循环提取数组值
    一、使用json提取器提取数组值:   提取数组: -1代表取所有的数组值,默认值not_found;二、添加循环控制器,循环次数为数组长度:${变量名_matchNr}示例:${TaskID2_matchN......
  • Newtonsoft.Json保留小数Convert
    ///<summary>///自定义数值类型序列化转换器///</summary>publicclassDecimalDigitsConvert:JsonConverter{//是否开启自定义反......
  • Newtonsoft.Json时间处理
    一、使用自带的JsonSerializerSettingssettings=newJsonSerializerSettings();settings.Converters.Add(newIsoDateTimeConverter{Dat......
  • MYSQL 列值为JSON串匹配条件查询
    这里需定位到你要查询的字段再json中的位置。比如我需要我的列值JSON格式如下:我需要匹配Tin(123456,223432)可以像下面这样写SELECTREPLACE(JSON_EXTRACT(wms_r......
  • pyspark rdd转json字符串
    +--------+--------------------+|objectid|$geometry|+--------+--------------------+|5|[106.366970696000...|+--------+--------------------+......
  • 在 asp.net core 中,更换使用 Newtonsoft.Json 并阻止驼峰化命名
    首先需要在引用nuget包:Microsoft.AspNetCore.Mvc.NewtonsoftJson然后在添加MVC的Service时,进行添加配置:builder.Services.AddControllersWithViews().A......
  • json字符串与json对象之间的转换
    一、认识json1.什么是json?JSON(JavaScriptObjectNotation,JS对象标记)是一种轻量级的数据交换格式,用完全独立于编程语言的文本格式来存储和传输数据。(可以用......
  • C#中对象与JSON字符串互相转换的三种方式
    JSON(JavaScriptObjectNotation,JS对象标记)是一种轻量级的数据交换格式。关于内存对象和JSON字符串的相互转换,在实际项目中应比较广泛,经过一番搜索,找到如下三种方法......
  • jsonp 跨域请求
    背景:JavaScript是一种在Web开发中经常使用的前端动态脚本技术。在JavaScript中,有一个很重要的安全性限制,被称为“Same-OriginPolicy”(同源策略)。这一策略对于JavaScrip......
  • pandas 某几列转为json/dic 格式
    #%%importpandasaspddf=pd.read_excel('工作表.xlsx')col_list=list(df.columns)del_col_list=['c','d']#需要删除的字段名#构造备注列df['beizhu']=''for......