【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 属性设置的值. ...
随机推荐
- RabbitMQ 02 安装
安装 推荐使用Docker进行安装. 执行如下命令. docker run -d --restart always --name rabbitmq \ -e RABBITMQ_DEFAULT_USER ...
- 机器学习服务活体检测算法荣获CFCA权威安全认证
随着人脸识别技术在金融.医疗等多个领域的加速落地,网络安全.信息泄露等问题愈为突出,用户对应用稳定性和安全性的要求也更为严格.为保障各行业高效稳定的开展业务,提前发现和应对潜在安全风险,HMS Cor ...
- 【实变函数】四、Lebesgue积分
[实变函数]4. Lebesgue积分 本文介绍Lebesgue积分的定义,并给出积分的一些常用性质.注意Lebesgue积分的定义是从非负函数向一般函数扩展的,这依托于一般函数的分解\(f(x)=f ...
- Push failed idea将项目发布到gitHub失败
此时需要点击VCS --> inport into version..-->create git ...重新生成仓库
- MogDB企业应用 之 Rust驱动
引子 Rust 是一门系统编程语言,专注于安全,尤其是并发安全,支持函数式和命令式以及泛型等编程范式的多范式语言.Rust 在语法上和类似 C++,但是设计者想要在保证性能的同时提供更好的内存安全. ...
- c# TryParse
c# tryparse和parse对比,大体内容是一致的. parse 会返回异常,主要表现为三种. 第一种ArgumentNullException,这里面表示,为空. 第二种formatexcep ...
- PyQt 快速使用
1.安装 PyQt:使用 pip 命令在终端或命令提示符中运行以下命令: pip install pyqt5 2.创建 PyQt 应用程序:导入 PyQt5 模块并创建一个 QApplication ...
- 【git】ignore文件详解
1.功能 可以指定git,对于某些文件或者文件夹不进行追踪记录,例如一些依赖或者编译中间文件等. 2.使用注意 2.1 对于已经有提交记录的文件 对于已经提交的文件,即使加入了ignore文件也会被g ...
- PostgreSQL 14.4的安装以及使用以及一些安装的异常
PostgreSQL 14的安装以及使用 因为公司的一些要求,可能要换数据库,虽然之前装过,但是版本感觉还是新一点比较好,所以重新装一下 首先下载文件,直接去官网下载就行 https://www.en ...
- 力扣26(java&python)-删除有序数组中的重复项(简单)
题目: 给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度.元素的 相对顺序 应该保持 一致 . 由于在某些语言中不能改变数组的长 ...