首先引用dll :System.Web.Extensions。
再自定义转换器代码如下:
  1. public class JavaScriptSerilizeConvert : JavaScriptConverter
  2. {
  3. //支持的需要转换的类型,是集合可以是多个
  4. public override IEnumerable<Type> SupportedTypes => new List<Type>(new Type[] { typeof(Entity) });
  5.  
  6. public override object Deserialize(IDictionary<string, object> dictionary, Type type, JavaScriptSerializer serializer)
  7. {
  8. //这样写,不管什么类型的对象都能反序列化了
  9. var t = Activator.CreateInstance(type);
  10.  
  11. var props = type.GetProperties();
  12.  
  13. if (dictionary != null)
  14. {
  15. foreach (var item in dictionary)
  16. {
  17. //这里有可能大小写不同,
  18. //兼容大小写
  19. var p = props.Where(a => a.Name.ToLower() == item.Key.ToLower()).ToList();
  20. if(p.Count>1)
  21. p = props.Where(a => a.Name== item.Key).ToList();
  22.  
  23. if (p.Count > 0)
  24. {
  25. int val = 0;
  26.  
  27. if (p[0].PropertyType == typeof(int))
  28. {
  29. if (int.TryParse(item.Value.ToString(), out val))
  30. {
  31.  
  32. p[0].SetValue(t, val);
  33. }
  34. }// else if double 这里要判断double 其他也一样
  35. else
  36. {
  37. p[0].SetValue(t, item.Value);
  38. }
  39.  
  40. }
  41.  
  42. }
  43. return t;
  44. }
  45. return null;
  46. }
  47.  
  48. public override IDictionary<string, object> Serialize(object obj, JavaScriptSerializer serializer)
  49. {
  50. //不同的类型实体可以做不同的处理
  51. if (obj is Entity)
  52. {
  53. Entity t = obj as Entity;
  54.  
  55. var dic= new Dictionary<string, object>();
  56. var type = t.GetType();
  57.  
  58. var props = type.GetProperties();
  59.  
  60. foreach (var item in props)
  61. {
  62. var val = item.GetValue(obj);
  63.  
  64. if (val != null)
  65. {
  66. dic.Add(item.Name, val);
  67. }
  68. }
  69.  
  70. return dic;
  71. }
  72. else
  73. {
  74. return new Dictionary<string, object>();
  75. }
  76. }
  77. }
控制台测试程序:
  1. static void Main(string[] args)
  2. {
  3. JavaScriptSerializer serializer = new JavaScriptSerializer();
  4.  
  5. var entity = new Entity();
  6.  
  7. entity.Id = 1;
  8. entity.Name = null;
  9. entity.Des = "123";
  10. 可以注册多个自定义转换器
  11. serializer.RegisterConverters(new JavaScriptConverter[] { new JavaScriptSerilizeConvert() });
  12. var str = serializer.Serialize(entity);
  13.  
  14. Console.WriteLine(str);
  15.  
  16. //这里需要注意 一般在不用转换器的情况下 如果实体里属性Id的类型是int类型,
  17. //这里2出就不要加双引号,不然报错
  18. //我这里在自定义转换器上做了处理,所以能够把string类型的2转换成int型。
  19. var str2 = "{ \"Id\":\"2\",\"Name\":null,\"Des\":\"\"}";
  20. var en2 = serializer.Deserialize<Entity>(str2);
  21. Console.WriteLine(en2.Id);
  22. Console.ReadLine();
  23. }
实体Entity:
  1. public class Entity
  2. {
  3. public int Id { get; set; }
  4. public string Name { get; set; }
  5. public string Des { get; set; }
  6. }

这是简单的实体,如果有实体嵌套,也没关系,如果是都不序列化null,public override IEnumerable<Type> SupportedTypes => new List<Type>(new Type[] { typeof(Entity),typeof(SubEntity) });这里加上就行

【c#】JavaScriptSerializer 不序列化null值的更多相关文章

  1. 【私人定制jackson】定制jackson的自定义序列化(null值的处理)

    最近用springMVC做服务端的http+json的接口,出现一个不是特别容易解决的问题: 在对List类型的值进行处理时,有一部分服务是有做一些逻辑判断的,在逻辑判断不通过的时候会返回一个null ...

  2. 定制jackson的自定义序列化(null值的处理)

    http://www.cnblogs.com/lic309/p/5048631.html

  3. .net MVC 使用 JSON JavaScriptSerializer 进行序列化或反序列化时出错,字符串的长度超过了为 maxJsonLength 属性设置的值

    在.net mvc的controller中,方法返回JsonResult,一般我们这么写: [HttpPost] public JsonResult QueryFeature(string url, ...

  4. SpringBoot中配置不序列化返回值为null的属性

    package com.weiresearch.properties; import com.fasterxml.jackson.annotation.JsonInclude;import com.f ...

  5. JSON JavaScriptSerializer 进行序列化或反序列化时出错。字符串的长度超过了为 maxJsonLength 属性设置的值

    在.net mvc的controller中,方法返回JsonResult,一般我们这么写:   [HttpPost]   public JsonResult QueryFeature(string u ...

  6. 源码分析springboot自定义jackson序列化,默认null值个性化处理返回值

    最近项目要实现一种需求,对于后端返回给前端的json格式的一种规范,不允许缺少字段和字段值都为null,所以琢磨了一下如何进行将springboot的Jackson序列化自定义一下,先看看如何实现,再 ...

  7. JSON序列化自己主动过滤NULL值

    使用Newtonsoft.Json.dll 序列化为json时主动将NULL值过滤掉.详细做法: var jSetting = new JsonSerializerSettings {NullValu ...

  8. 【ITOO 2】使用ArrayList时的注意事项:去除多余的null值

    问题描述:在课表导入的时候,将数据从excel表里读出,然后将list批量插入到对应的课程表的数据表单中去,出现结果:当我们导入3条数据时,list.size()为3,但是实际上,list里面存在10 ...

  9. 使用JavaScriptSerializer进行序列化日期类型应该注意的问题

    原文:使用JavaScriptSerializer进行序列化日期类型应该注意的问题 JavaScriptSerializer在序列化DateTime时,是用刻度来表示的,具体在Json体现为:\/Da ...

  10. 使用JSON JavaScriptSerializer 进行序列化或反序列化时出错。字符串的长度超过了为 maxJsonLength属性

    "/"应用程序中的服务器错误.使用 JSON JavaScriptSerializer 进行序列化或反序列化时出错.字符串的长度超过了为 maxJsonLength 属性设置的值. ...

随机推荐

  1. std::thread 一:创建线程的三种方式

    前言: #include <thread> thread.join() // 阻塞 thread.detach() // 非阻塞 thread.joinable() // bool,判断线 ...

  2. javascript现代编程系列教程之六——数字型数据类型转换

    一.整数转换 在 JavaScript 中,parseInt() 函数会将其参数转换为字符串,然后解析该字符串,并返回一个整数或 NaN.如果 parseInt() 函数的参数是一个非常大的浮点数(如 ...

  3. 【GDKOI 2024 TG Day2】染色(set) 题解

    发现我们给一个点染上色后有: 我们称这是一个大小为 1 的十字. 进一步地,我们给这 5 个点再次染上色后有: 我们称这是一个大小为 2 的十字. 同理可得,我们给这 5 个点染上相同的大小为 2 的 ...

  4. 力扣180(MySQL)-连续出现的数字(中等)

    题目: 编写一个 SQL 查询,查找所有至少连续出现三次的数字. 返回的结果表中的数据可以按 任意顺序 排列. 查询结果格式如下面的例子所示: 解题思路: 原表数据: 方法一: 使用内连接(inner ...

  5. 阿里云云原生加速器企业硬之城携手阿里云 Serverless 应用引擎(SAE)打造低代码平台

    简介: 作为入选阿里云首期云原生加速器的企业,硬之城此前也获得了阿里云首批产品生态集成认证,通过云原生加速器项目携手阿里云共建更加丰富的云原生产业生态圈,加速云原生落地. 作者 | 陈泽涛(硬之城产品 ...

  6. Flagger on ASM·基于Mixerless Telemetry实现渐进式灰度发布系列 1 遥测数据

    简介: 服务网格ASM的Mixerless Telemetry技术,为业务容器提供了无侵入式的遥测数据.遥测数据一方面作为监控指标被ARMPS/prometheus采集,用于服务网格可观测性:另一方面 ...

  7. [FAQ] VsCode 同时多行编辑

      [多光标自定义编辑] 按住 alt 键,鼠标左键点击,出现多个光标. [批量选中匹配编辑] 鼠标选中字符,按快捷键 ctrl + shift + L,字符的右侧都出现光标,可同时编辑. Tool: ...

  8. [FAQ] wechaty 与 wechaty-puppet-padplus 生态安全吗

    答案是肯定有风险. 非技术角度讲,使用这种方式登录微信存在被微信官方风控的可能性,需要特别注意. 另外,以下是 wechaty 项目说明文件中截取的内容: 我们可以看到,除了微信官方方面的风险,我们的 ...

  9. Multisim 14.0 安装教程

    1.  安装环境: win 7 64bit + Multisim 14.0 教育版. 2. 安装步骤: step 1:下载安装包NI_Circuit_Design_Suite_14.0***,解压后如 ...

  10. Spring Boot 编写 API 的 10条最佳实践

    10 个最佳实践,让您像专业人士一样编写 Spring Boot API,并结合编码示例和解释: 1. RESTful API 设计原则: 清晰一致的资源命名:使用准确反映 API 管理的资源的名词( ...