C# 扩展方法——序列化与反序列化
其他扩展方法详见:https://www.cnblogs.com/zhuanjiao/p/12060937.html
主要是是对日期格式的处理
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Serialization;
using System;
using System.Collections.Generic;
using System.Reflection; namespace CoSubject.Common.JsonNet
{
public static class NewtonsoftJsonSerializer
{
public static JsonSerializerSettings Settings { get; private set; } static NewtonsoftJsonSerializer()
{
Settings = new JsonSerializerSettings
{
Converters = new List<JsonConverter> { new IsoDateTimeConverter() },
ContractResolver = new CustomContractResolver(),
ConstructorHandling = ConstructorHandling.AllowNonPublicDefaultConstructor
};
} /// <summary>
/// Serialize an object to json string.
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
public static string Serialize(this object obj)
{
return obj == null ? null : JsonConvert.SerializeObject(obj, Settings);
} /// <summary>
/// Serialize an object to json string.
/// </summary>
/// <param name="obj"></param>
/// <param name="joinChar"></param>
/// <returns></returns>
public static string SerializeObjectTime(this object obj, string joinChar = "/")
{
Settings = new JsonSerializerSettings
{
Converters =
new List<JsonConverter>
{
new IsoDateTimeConverter()
{
DateTimeFormat =
string.Format( "yyyy{0}MM{0}dd HH:mm:ss",joinChar)
}
},
ContractResolver = new CustomContractResolver(),
ConstructorHandling = ConstructorHandling.AllowNonPublicDefaultConstructor
};
return obj == null ? null : JsonConvert.SerializeObject(obj, Settings);
} public static string SerializeObjectTimeNoSecond(this object obj, string joinChar = "/")
{
Settings = new JsonSerializerSettings
{
Converters =
new List<JsonConverter>
{
new IsoDateTimeConverter()
{
DateTimeFormat = string.Format( "yyyy{0}MM{0}dd HH:mm", joinChar)
}
},
ContractResolver = new CustomContractResolver(),
ConstructorHandling = ConstructorHandling.AllowNonPublicDefaultConstructor
};
return obj == null ? null : JsonConvert.SerializeObject(obj, Settings);
} public static string SerializeObjectDate(this object obj, string joinChar = "/")
{
Settings = new JsonSerializerSettings
{
Converters =
new List<JsonConverter>
{
new IsoDateTimeConverter()
{
DateTimeFormat = string.Format( "yyyy{0}MM{0}dd", joinChar)
}
},
ContractResolver = new CustomContractResolver(),
ConstructorHandling = ConstructorHandling.AllowNonPublicDefaultConstructor
};
return obj == null ? null : JsonConvert.SerializeObject(obj, Settings);
} /// <summary>
/// Deserialize a json string to an object.
/// </summary>
/// <param name="value"></param>
/// <param name="type"></param>
/// <returns></returns>
public static object Deserialize(this string value, Type type)
{
return JsonConvert.DeserializeObject(value, type, Settings);
} /// <summary>
/// Deserialize a json string to a strong type object.
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="value"></param>
/// <param name="joinChar"></param>
/// <returns></returns>
public static T Deserialize<T>(this string value, string joinChar = "/") where T : class
{
Settings = new JsonSerializerSettings
{
Converters = new List<JsonConverter> { new IsoDateTimeConverter() { DateTimeFormat = string.Format("yyyy{0}MM{0}dd", joinChar) } },
DateTimeZoneHandling = DateTimeZoneHandling.Utc
};
return JsonConvert.DeserializeObject<T>(value, Settings);
} /// <summary>
/// Deserialize a json string to a strong type object.
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="value"></param>
/// <param name="joinChar"></param>
/// <returns></returns>
public static T DeserializeNoSecond<T>(this string value, string joinChar = "/") where T : class
{
Settings = new JsonSerializerSettings
{
Converters = new List<JsonConverter> { new IsoDateTimeConverter() { DateTimeFormat = string.Format("yyyy{0}MM{0}dd HH:mm", joinChar) } },
DateTimeZoneHandling = DateTimeZoneHandling.Utc
};
return JsonConvert.DeserializeObject<T>(value, Settings);
} class CustomContractResolver : DefaultContractResolver
{
protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
{
var jsonProperty = base.CreateProperty(member, memberSerialization);
if (jsonProperty.Writable) return jsonProperty;
var property = member as PropertyInfo;
if (property == null) return jsonProperty;
var hasPrivateSetter = property.GetSetMethod(true) != null;
jsonProperty.Writable = hasPrivateSetter;
return jsonProperty;
}
}
}
}
C# 扩展方法——序列化与反序列化的更多相关文章
- consoleInfo 输出 数组套对象 不显示...的方法 序列化 再反序列化
consoleInfo (...args) { // console.info('this', this) const name = this.$options.name let outName = ...
- Java对象表示方式1:序列化、反序列化和transient关键字的作用
平时我们在Java内存中的对象,是无法进行IO操作或者网络通信的,因为在进行IO操作或者网络通信的时候,人家根本不知道内存中的对象是个什么东西,因此必须将对象以某种方式表示出来,即存储对象中的状态.一 ...
- 序列化、反序列化和transient关键字的作用
引言 将 Java 对象序列化为二进制文件的 Java 序列化技术是 Java 系列技术中一个较为重要的技术点,在大部分情况下,开发人员只需要了解被序列化的类需要实现 Serializable 接口, ...
- java对象序列化、反序列化
平时我们在Java内存中的对象,是无法进行IO操作或者网络通信的,因为在进行IO操作或者网络通信的时候,人家根本不知道内存中的对象是个什么东西,因此必须将对象以某种方式表示出来,即存储对象中的状态.一 ...
- 序列化和反序列化及Protobuf 基本使用
序列化和反序列化 序列化和反序列化在平常工作中会大量使用,然而并不一定非常清楚它的概念.序列化和反序列化的选型却是系统设计或重构一个重要的环节,在分布式.大数据量系统设计里面更为显著.机器间的通信需要 ...
- Java对象表示方式1:序列化、反序列化的作用
1.序列化是的作用和用途 序列化:把对象转换为字节序列的过程称为对象的序列化. 反序列化:把字节序列恢复为对象的过程称为对象的反序列化. 对象的序列化主要有两种用途: 1) 把对象的字节序列永久地保存 ...
- 利用扩展方法重写JSON序列化和反序列化
利用.NET 3.5以后的扩展方法重写JSON序列化和反序列化,在代码可读性和可维护性上更加加强了. 首先是不使用扩展方法的写法 定义部分: /// <summary> /// JSON ...
- DynamicObject扩展--实现JSON和DynamicObject的序列化与反序列化
度娘许久,找不到我满意的答案,于是自己东凑西凑实现一个. DynamicObject扩展--实现JSON和DynamicObject的序列化与反序列化,亲测良好. 看代码 using System; ...
- PHP中的抽象类与抽象方法/静态属性和静态方法/PHP中的单利模式(单态模式)/串行化与反串行化(序列化与反序列化)/约束类型/魔术方法小结
前 言 OOP 学习了好久的PHP,今天来总结一下PHP中的抽象类与抽象方法/静态属性和静态方法/PHP中的单利模式(单态模式)/串行化与反串行化(序列化与反序列化). 1 PHP中的抽象 ...
随机推荐
- SolidWorks学习笔记3几个草图实例
绘制五角星 创建一个正五边形的内切圆,圆心和圆点重合,注意垂直关系. 选中所有,都设置为构造线. 依次连接直线, 点击裁剪实体,划过所要删除的线段. 绘制高度对称草图 注意事项: 最上和最下的圆心要和 ...
- 菜鸟系列Fabric——Fabric 1.2 多机部署(3)
多机部署fabric kafka共识 1. 角色分配 主机1 主机 2 Org1 peer0 1 Org2 peer 0 1 Orderer 0 1 Orderer 2 kafka 0 1 kafka ...
- java.sql.SQLException: Access denied for user 'root'@'10.10.7.180' (using password: YES)
1.刚开始连接数据库提示是: java.sql.SQLException: Access denied for user 'root'@'10.10.7.180' (using password: N ...
- Rsyslog收集应用日志
收集系统其它服务日志,在客户端node1 上操作,示例以openstack-nova 服务的日志为例: 1.先修改配置文件 /etc/rsyslog.conf,完整内容如下: [root@node1 ...
- 布隆过滤器(Bloom Filter)原理以及应用
应用场景 主要是解决大规模数据下不需要精确过滤的场景,如检查垃圾邮件地址,爬虫URL地址去重,解决缓存穿透问题等. 布隆过滤器(Bloom Filter)是1970年由布隆提出的.它实际上是一个很长的 ...
- 利用commons-pool2自定义对象池
一.为什么使用对象池 恰当地使用对象池化技术,可以有效地减少对象生成和初始化时的消耗,提高系统的运行效率.commons-pool2是Apache下一个开源的公共资源池.我们可以根据它来快速的建立 ...
- 小菜鸟之Oracle数据库
select * from STUDENT; select * from mark; select * from COURSE; select * from teacher; --注释 select ...
- 用Java实现对英文版《飘》的文件读取与写入操作
从文件读入<飘>的英文版,并将结果输出到文件中 要求一: 实现对英文版<飘>的字母出现次数统计 package File; import java.io.FileInputSt ...
- Yii2.0中使用Union查询,并使用join,支持分页
$query1 = Class1::find()->where($where); $query2 = Class1::find()->alias('a')->join('left j ...
- Postman之简单使用
前提:已获得接口文档 / 抓包数据 1.启动Postman 直接在这个页面输入数据(不用管其他的地方!!!) 2.按照接口文档填入 注意蓝色框中的数据 请求方式:POST(几乎都是使用POST/GET ...