【c#】JavaScriptSerializer 不序列化null值
public class JavaScriptSerilizeConvert : JavaScriptConverter
{
//支持的需要转换的类型,是集合可以是多个
public override IEnumerable<Type> SupportedTypes => new List<Type>(new Type[] { typeof(Entity) }); public override object Deserialize(IDictionary<string, object> dictionary, Type type, JavaScriptSerializer serializer)
{
//这样写,不管什么类型的对象都能反序列化了
var t = Activator.CreateInstance(type); var props = type.GetProperties(); if (dictionary != null)
{
foreach (var item in dictionary)
{
//这里有可能大小写不同,
//兼容大小写
var p = props.Where(a => a.Name.ToLower() == item.Key.ToLower()).ToList();
if(p.Count>1)
p = props.Where(a => a.Name== item.Key).ToList(); if (p.Count > 0)
{
int val = 0; if (p[0].PropertyType == typeof(int))
{
if (int.TryParse(item.Value.ToString(), out val))
{ p[0].SetValue(t, val);
}
}// else if double 这里要判断double 其他也一样
else
{
p[0].SetValue(t, item.Value);
} } }
return t;
}
return null;
} public override IDictionary<string, object> Serialize(object obj, JavaScriptSerializer serializer)
{
//不同的类型实体可以做不同的处理
if (obj is Entity)
{
Entity t = obj as Entity; var dic= new Dictionary<string, object>();
var type = t.GetType(); var props = type.GetProperties(); foreach (var item in props)
{
var val = item.GetValue(obj); if (val != null)
{
dic.Add(item.Name, val);
}
} return dic;
}
else
{
return new Dictionary<string, object>();
}
}
}
static void Main(string[] args)
{
JavaScriptSerializer serializer = new JavaScriptSerializer(); var entity = new Entity(); entity.Id = 1;
entity.Name = null;
entity.Des = "123";
可以注册多个自定义转换器
serializer.RegisterConverters(new JavaScriptConverter[] { new JavaScriptSerilizeConvert() });
var str = serializer.Serialize(entity); Console.WriteLine(str); //这里需要注意 一般在不用转换器的情况下 如果实体里属性Id的类型是int类型,
//这里2出就不要加双引号,不然报错
//我这里在自定义转换器上做了处理,所以能够把string类型的2转换成int型。
var str2 = "{ \"Id\":\"2\",\"Name\":null,\"Des\":\"\"}";
var en2 = serializer.Deserialize<Entity>(str2);
Console.WriteLine(en2.Id);
Console.ReadLine();
}
public class Entity
{
public int Id { get; set; }
public string Name { get; set; }
public string Des { get; set; }
}
这是简单的实体,如果有实体嵌套,也没关系,如果是都不序列化null,public override IEnumerable<Type> SupportedTypes => new List<Type>(new Type[] { typeof(Entity),typeof(SubEntity) });这里加上就行
【c#】JavaScriptSerializer 不序列化null值的更多相关文章
- 【私人定制jackson】定制jackson的自定义序列化(null值的处理)
最近用springMVC做服务端的http+json的接口,出现一个不是特别容易解决的问题: 在对List类型的值进行处理时,有一部分服务是有做一些逻辑判断的,在逻辑判断不通过的时候会返回一个null ...
- 定制jackson的自定义序列化(null值的处理)
http://www.cnblogs.com/lic309/p/5048631.html
- .net MVC 使用 JSON JavaScriptSerializer 进行序列化或反序列化时出错,字符串的长度超过了为 maxJsonLength 属性设置的值
在.net mvc的controller中,方法返回JsonResult,一般我们这么写: [HttpPost] public JsonResult QueryFeature(string url, ...
- SpringBoot中配置不序列化返回值为null的属性
package com.weiresearch.properties; import com.fasterxml.jackson.annotation.JsonInclude;import com.f ...
- JSON JavaScriptSerializer 进行序列化或反序列化时出错。字符串的长度超过了为 maxJsonLength 属性设置的值
在.net mvc的controller中,方法返回JsonResult,一般我们这么写: [HttpPost] public JsonResult QueryFeature(string u ...
- 源码分析springboot自定义jackson序列化,默认null值个性化处理返回值
最近项目要实现一种需求,对于后端返回给前端的json格式的一种规范,不允许缺少字段和字段值都为null,所以琢磨了一下如何进行将springboot的Jackson序列化自定义一下,先看看如何实现,再 ...
- JSON序列化自己主动过滤NULL值
使用Newtonsoft.Json.dll 序列化为json时主动将NULL值过滤掉.详细做法: var jSetting = new JsonSerializerSettings {NullValu ...
- 【ITOO 2】使用ArrayList时的注意事项:去除多余的null值
问题描述:在课表导入的时候,将数据从excel表里读出,然后将list批量插入到对应的课程表的数据表单中去,出现结果:当我们导入3条数据时,list.size()为3,但是实际上,list里面存在10 ...
- 使用JavaScriptSerializer进行序列化日期类型应该注意的问题
原文:使用JavaScriptSerializer进行序列化日期类型应该注意的问题 JavaScriptSerializer在序列化DateTime时,是用刻度来表示的,具体在Json体现为:\/Da ...
- 使用JSON JavaScriptSerializer 进行序列化或反序列化时出错。字符串的长度超过了为 maxJsonLength属性
"/"应用程序中的服务器错误.使用 JSON JavaScriptSerializer 进行序列化或反序列化时出错.字符串的长度超过了为 maxJsonLength 属性设置的值. ...
随机推荐
- 生成 MFC ActiveX (OCX)时,报错:MSB801:未能注册输出
我们在生成 ocx 控件时,报错:MSB801:未能注册输出,如下图: 解决方法: 1.打开 项目属性 -> 链接器 -> 常规 : 逐用户重定向 改为 是 2. 重新生成 如果此时 ...
- openGauss数据库xlog目录满问题处理
openGauss 数据库 xlog 目录满问题处理 openGauss 数据库 xlog 满通常为以下几个原因: 1.主备状态不正常,存在网络问题,集群内有宕机的节点 2.xlog 保留数量过多 3 ...
- 抓包整理————tcp 传输数据的基础概念[十一]
前言 简单介绍一下tcp 数据传输. 正文 tcp 数据传输是怎么样子的呢? 比如我们在代码中写好了,connection 去连接. 然后我们用 write 去读取数据,这个时候呢,到底我们的操作系统 ...
- mysql 必知必会整理——mysql 介绍[一]
前言 对mysql 进行简介. 正文 mysql 是一种数据库,那么什么是数据库呢? 数据库是一个以某种有组织的方式存储的数据集合. 也就是说数据有某种组织规律的就叫做数据库. 数据库(databas ...
- redis 简单整理——主从拓扑图[二十二]
前言 Redis的复制拓扑结构可以支持单层或多层复制关系,根据拓扑复杂性 可以分为以下三种:一主一从.一主多从.树状主从结构,下面分别介绍. 正文 一主一从结构 一主一从结构是最简单的复制拓扑结构,用 ...
- mmdeploy源码安装 (转换faster rcnn r50/yolox为tensorrt,并用mmdeploy sdk推理)
mmdeploy源码安装 (转换faster rcnn r50/yolox为tensorrt,并进行推理) 这个系列是一个随笔,是我走过的一些路,有些地方可能不太完善.如果有那个地方没看懂,评论区问就 ...
- next.js app目录 i18n国际化简单实现
最近在用next写一个多语言的项目,找了好久没找到简单实现的教程,实践起来感觉都比较复杂,最后终于是在官方文档找到了,结合网上找到的代码demo,终于实现了,在这里简单总结一下. 此教程适用于比较简单 ...
- Oracle 在PL/SQL将字符串分割输出
Oracle 在PL/SQL将字符串分割输出 示例如下: declare begin for maina in (select tt.line ll from (select regexp_subst ...
- 02_Vue模板语法
Vue模板语法有2大类: 1.插值语法: 功能:用于解析标签体内容. 写法:{{xxx}},xxx是js的表达式,且可以直接读取到data中的所 ...
- MAE 自监督算法介绍和基于 EasyCV 的复现
简介:自监督学习(Self-Supervised Learning)能利用大量无标注的数据进行表征学习,然后在特定下游任务上对参数进行微调.通过这样的方式,能够在较少有标注数据上取得优于有监督学习方 ...