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中的抽象 ...
随机推荐
- Andrew算法求二维凸包-学习笔记
凸包的概念 首先,引入凸包的概念: (有点窄的时候...图片右边可能会被吞,拉开图片看就可以了) 大概长这个样子: 那么,给定一些散点,如何快速地求出凸包呢(用在凸包上的点来表示凸包) Andrew算 ...
- filebeat的层次架构图和配置部署 -- 不错的文档 - elasticsearch 性能调优 + Filebeat配置
1.fielbeat的组件架构-看出层次感 2.工作流程:每个harvester读取新的内容一个日志文件,新的日志数据发送到spooler(后台处理程序),它汇集的事件和聚合数据发送到你已经配置了Fi ...
- flink部署
参考: https://ververica.cn/developers-resources/ #flink参数 https://blog.csdn.net/qq_35440040/article/de ...
- PTA(Basic Level)1047.编程团体赛
编程团体赛的规则为:每个参赛队由若干队员组成:所有队员独立比赛:参赛队的成绩为所有队员的成绩和:成绩最高的队获胜. 现给定所有队员的比赛成绩,请你编写程序找出冠军队. 输入格式: 输入第一行给出一个正 ...
- 查找担保圈-step3-获取担保圈路径
USE [test] GO /****** Object: StoredProcedure [dbo].[p01_get_group_path] Script Date: 2019/7/8 14:40 ...
- GitHub从小白到熟悉<三>
上传文件
- spark教程(七)-文件读取案例
sparkSession 读取 csv 1. 利用 sparkSession 作为 spark 切入点 2. 读取 单个 csv 和 多个 csv from pyspark.sql import Sp ...
- CentOS7 Python3安装redis
CentOS7安装配置Redis 第一步:下载redis安装包 wget http://download.redis.io/releases/redis-4.0.9.tar.gz 想下载哪个版本可以复 ...
- Mysql8 root密码忘记了
需要确定自己的mysql版本是否是8 [root@smonitor ~]# mysql --version mysql Ver 8.0.13 for Linux on x86_64 (MySQL Co ...
- 编译LAMP部署动态网站环境
LAMP动态网站部署架构是由一套 Linux+Apache+MySQL+PHP 组成的动态网站系统解决方案. 以下配置环境为:Linux=RHEL7 --> Apache=2.4.33 --&g ...