其他扩展方法详见: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. 【Linux开发】linux设备驱动归纳总结(五):3.操作硬件——IO静态映射

    linux设备驱动归纳总结(五):3.操作硬件--IO静态映射 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ...

  2. elastic mapping not_analyzed 简单理解 + analysis-ik分词器安装

    1.索引index ,这个参数可以控制字段应该怎样建索引,怎样查询.它有以下三个可用值: not_analyzed:将字段的原始值放入索引中,作为一个独立的term,它是除string字段以外的所有字 ...

  3. 如何在java中去除中文文本的停用词

    1.  整体思路 第一步:先将中文文本进行分词,这里使用的HanLP-汉语言处理包进行中文文本分词. 第二步:使用停用词表,去除分好的词中的停用词. 2.  中文文本分词环境配置 使用的HanLP-汉 ...

  4. iframe高度/宽度自适应(使用body而不是docuemntElement对象)

    iframe在ie11中会显示过于短.为了自适应,增加如下代码: <iframe *** onload='changeFrameHeight()' > <script> fun ...

  5. Storm本地启动拓扑报错:Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/storm/topology/IRichSpout

    问题描述: Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/storm/topology ...

  6. 设计模式在 Spring 框架中的良好应用

    在开始正文之前,请你先思考几个问题: 你项目中有使用哪些 GOF 设计模式 说一说 GOF 23 种设计模式的设计理念 说说 Spring 框架中如何实现设计模式 假设我是面试官问起了你这些面试题,你 ...

  7. 正确理解Widget::Widget(QWidget *parent) :QWidget(parent)这句话

    原文:https://zhuanlan.zhihu.com/p/31310536 /********原文********/ 最近很多学习Qt的小伙伴在我的微信公众号私信我,该如何理解下面段代码的第二行 ...

  8. JavaScript处理股票数据

    1, 先使用Ajax发送异步请求到:http://hq.sinajs.cn/list=s_sh000001 2, 然后用[,]切割成数组https://www.w3school.com.cn/js/j ...

  9. 我的python学习之旅——安装python

    windows下载安装: 1.下载安装包: 访问官方网站:https://www.python.org/downloads/ 下载自己想要的版本安装,这里下载当前最新版3.8: 选择64位的Windo ...

  10. PB中的DataStore的应用示例

    编程过程中想在窗口中加一个下拉列表(DDLB),原来听同学说过可以动态改变下拉列表的值,数据库中的表改变,前台客户端的下拉列表就会变,记得当时同学说的是用一个叫下拉数据窗口(DDDW)的东西做的,一直 ...