其他扩展方法详见: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# 扩展方法——序列化与反序列化的更多相关文章

  1. consoleInfo 输出 数组套对象 不显示...的方法 序列化 再反序列化

    consoleInfo (...args) { // console.info('this', this) const name = this.$options.name let outName = ...

  2. Java对象表示方式1:序列化、反序列化和transient关键字的作用

    平时我们在Java内存中的对象,是无法进行IO操作或者网络通信的,因为在进行IO操作或者网络通信的时候,人家根本不知道内存中的对象是个什么东西,因此必须将对象以某种方式表示出来,即存储对象中的状态.一 ...

  3. 序列化、反序列化和transient关键字的作用

    引言 将 Java 对象序列化为二进制文件的 Java 序列化技术是 Java 系列技术中一个较为重要的技术点,在大部分情况下,开发人员只需要了解被序列化的类需要实现 Serializable 接口, ...

  4. java对象序列化、反序列化

    平时我们在Java内存中的对象,是无法进行IO操作或者网络通信的,因为在进行IO操作或者网络通信的时候,人家根本不知道内存中的对象是个什么东西,因此必须将对象以某种方式表示出来,即存储对象中的状态.一 ...

  5. 序列化和反序列化及Protobuf 基本使用

    序列化和反序列化 序列化和反序列化在平常工作中会大量使用,然而并不一定非常清楚它的概念.序列化和反序列化的选型却是系统设计或重构一个重要的环节,在分布式.大数据量系统设计里面更为显著.机器间的通信需要 ...

  6. Java对象表示方式1:序列化、反序列化的作用

    1.序列化是的作用和用途 序列化:把对象转换为字节序列的过程称为对象的序列化. 反序列化:把字节序列恢复为对象的过程称为对象的反序列化. 对象的序列化主要有两种用途: 1) 把对象的字节序列永久地保存 ...

  7. 利用扩展方法重写JSON序列化和反序列化

    利用.NET 3.5以后的扩展方法重写JSON序列化和反序列化,在代码可读性和可维护性上更加加强了. 首先是不使用扩展方法的写法 定义部分: /// <summary>  /// JSON ...

  8. DynamicObject扩展--实现JSON和DynamicObject的序列化与反序列化

    度娘许久,找不到我满意的答案,于是自己东凑西凑实现一个. DynamicObject扩展--实现JSON和DynamicObject的序列化与反序列化,亲测良好. 看代码 using System; ...

  9. PHP中的抽象类与抽象方法/静态属性和静态方法/PHP中的单利模式(单态模式)/串行化与反串行化(序列化与反序列化)/约束类型/魔术方法小结

      前  言  OOP  学习了好久的PHP,今天来总结一下PHP中的抽象类与抽象方法/静态属性和静态方法/PHP中的单利模式(单态模式)/串行化与反串行化(序列化与反序列化). 1  PHP中的抽象 ...

随机推荐

  1. DIN

    1. DIN(Deep Interest Network)优点 使用用户兴趣分布来表示用户多种多样的兴趣爱好. 使用Attention机制来实现Local Activation,局部激活相关的历史兴趣 ...

  2. 单例模式(一)static、final和单例模式

    static 那天我朋友问了我个问题,static和单例模式有什么区别,所以我觉得static可以讲一下 他的问题是,把对象弄成static是不是就不变了 显然,这是还没弄清楚引用和对象的区别 其实存 ...

  3. Net 文件和流 I/O

    文件和流 I/O 2017/03/30 文件和流 I/O(输入/输出)是指在存储媒介中传入或传出数据. 在 .NET Framework 中,System.IO 命名空间包含允许以异步方式和同步方式对 ...

  4. vim配置及插件安装笔记

    1. 首先打开vim的配置文件vimrc,并加入以下常用的配置: cd ~ mkdir .vim vim .vimrc " 设置当文件被改动时自动载入 set autoread " ...

  5. HanLP-停用词表的使用示例

    停用词表的修改 停用词表在“pyhanlp\static\data\dictionary”路径下的“stopwords.txt”文件中,CoreStopWordDictionary.apply方法支持 ...

  6. List是有序的Set是无序的吗? List和Set对比

    import java.util.*; /* * List和Set对比 * */ public class ListVSSet { public static void main(String[] a ...

  7. 设计模式:备忘录模式(Memento)

    个人比较喜欢玩单机游戏,什么仙剑.古剑.鬼泣.使命召唤.三国无双等等一系列的游戏我都玩过(现在期待凡人修仙传),对于这些游戏除了剧情好.场面大.爽快之外,还可以随时存档,等到下次想玩了又可以从刚开始的 ...

  8. 前端-CSS-初探-注释-语法结构-引入方式-选择器-选择器优先级-01(待完善)

    目录 CSS(Cascading Style Sheet) CSS注释 CSS语法结构 CSS的三种引入方式 选择器 伪类.伪元素选择器速查 CSS选择器优先级***** 选择器相同的情况下 选择器不 ...

  9. nohup重定向到其它的日志文件

    如果使用nohup命令提交作业,那么在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中,除非另外指定了输出文件: nohup command > myout.file 2 ...

  10. 记Tomcat进程stop卡住问题定位处理

    部分内容参考自CSDN 测试环境通过agent注入了部分代码,其中包括几个Timer. 在通过启动脚本重启tomcat时,会一直有一个stop进程卡住,导致tomcat无法正常重启,进程卡住不动. 通 ...