在项目中用到了Newtonsoft.Json来实现序列化和反序列化,在这里写下实现代码。

1、创建类用于排除不序列化的属性

public class ExcludePropertiesContractResolver : DefaultContractResolver
{
IEnumerable<string> lstExclude; public ExcludePropertiesContractResolver(IEnumerable<string> excludedProperties)
{
lstExclude = excludedProperties;
} protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization)
{
return base.CreateProperties(type, memberSerialization).ToList().FindAll(p => !lstExclude.Contains(p.PropertyName));
}
}

2、序列化方法

以下分别是将对象、DataTable、集合序列化为Json字符串的方法:

        /// <summary>
/// T对象转换成json字符串
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="obj"></param>
/// <returns></returns>
public static string GetJsonString<T>(T obj, params string[] ignoreFields)
{
IsoDateTimeConverter iso = new IsoDateTimeConverter();
iso.DateTimeFormat = "yyyy-MM-ddTHH:mm:ss";
iso.DateTimeStyles = System.Globalization.DateTimeStyles.AssumeLocal;
string jsonStr = string.Empty;
JsonSerializerSettings js = new JsonSerializerSettings();
if (ignoreFields != null && ignoreFields.Length > 0)
{
List<string> ignoreList = ignoreFields.ToList();
js.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
js.ContractResolver = new ExcludePropertiesContractResolver(ignoreList);
}
js.Converters.Add(iso);
jsonStr = JsonConvert.SerializeObject(obj, Formatting.Indented, js);
return jsonStr;
} /// <summary>
/// DataTable对象转换成json字符串
/// </summary>
/// <param name="dt"></param>
/// <returns></returns>
public static string GetJsonString(DataTable dt, params string[] ignoreFields)
{
IsoDateTimeConverter iso = new IsoDateTimeConverter();
iso.DateTimeFormat = "yyyy-MM-ddTHH:mm:ss";
iso.DateTimeStyles = System.Globalization.DateTimeStyles.AssumeLocal;
string jsonStr = string.Empty;
JsonSerializerSettings js = new JsonSerializerSettings();
if (ignoreFields != null && ignoreFields.Length > 0)
{
List<string> ignoreList = ignoreFields.ToList();
js.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
js.ContractResolver = new ExcludePropertiesContractResolver(ignoreList);
}
js.Converters.Add(new DataTableConverter());
js.Converters.Add(iso);
jsonStr = JsonConvert.SerializeObject(dt, Formatting.Indented,js);
return jsonStr;
} /// <summary>
/// List对象转换成json字符串
/// </summary>
/// <param name="dt"></param>
/// <returns></returns>
public static string GetJsonString<T>(List<T> list, params string[] ignoreFields)
{
IsoDateTimeConverter iso = new IsoDateTimeConverter();
iso.DateTimeFormat = "yyyy-MM-ddTHH:mm:ss";
iso.DateTimeStyles = System.Globalization.DateTimeStyles.AssumeLocal;
string jsonStr = string.Empty;
JsonSerializerSettings js = new JsonSerializerSettings();
if (ignoreFields != null && ignoreFields.Length > 0)
{
List<string> ignoreList = ignoreFields.ToList();
js.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
js.ContractResolver = new ExcludePropertiesContractResolver(ignoreList);
}
js.Converters.Add(iso);
jsonStr = JsonConvert.SerializeObject(list, Formatting.Indented, js);
return jsonStr;
}

3、反序列化

以下是将Json字符串反序列化为对象、集合的方法。

        /// <summary>
/// json字符串转换成T对象
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="jsonStr"></param>
/// <returns></returns>
public static T GetObjectByJsonString<T>(string jsonStr)
{
T obj = JsonConvert.DeserializeObject<T>(jsonStr);
return obj;
} /// <summary>
/// json字符串转换成List对象
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="jsonStr"></param>
/// <returns></returns>
public static List<T> GetListByJsonString<T>(string jsonStr)
{
List<T> list = JsonConvert.DeserializeObject<List<T>>(jsonStr);
return list;
}

利用Newtonsoft.Json实现Json序列化与反序列化的更多相关文章

  1. 利用JavaScriptSerializer类 进行Json对象的序列化和反序列化和过滤

    项目下载:JavaScriptSerializer_对JSON对象序列化与反序列化及过滤器 利用<JavascriptSerializer类> 进行Json对象的序列化和反序列化 1. 首 ...

  2. .net core Json字符串的序列化和反序列化通用类源码,并模拟了10万数据对比DataContractJsonSerializer和Newtonsoft性能

    我们在开发中Json传输数据日益普遍,有很多关于Json字符串的序列化和反序列化的文章大多都告诉你怎么用,但是却不会告诉你用什么更高效.因为有太多选择,人们往往会陷入选择难题. 相比.NET Fram ...

  3. Json数据的序列化与反序列化的三种经常用法介绍

    下面内容是本作者从官网中看对应的教程后所做的demo.其体现了作者对相关知识点的个人理解..作者才疏学浅,难免会有理解不到位的地方.. 还请各位读者批判性对待... 本文主要介绍在Json数据的序列化 ...

  4. 【转】在C#中使用Json.Net进行序列化和反序列化及定制化

    作者:Minotauros 原文地址:在C#中使用Json.Net进行序列化和反序列化及定制化 序列化(Serialize)是将对象转换成字节流,并将其用于存储或传输的过程,主要用途是保存对象的状态, ...

  5. JSON JavaScriptSerializer 进行序列化或反序列化时出错。字符串的长度超过了为 maxJsonLength 属性设置的值

    在.net mvc的controller中,方法返回JsonResult,一般我们这么写:   [HttpPost]   public JsonResult QueryFeature(string u ...

  6. .net MVC 使用 JSON JavaScriptSerializer 进行序列化或反序列化时出错,字符串的长度超过了为 maxJsonLength 属性设置的值

    在.net mvc的controller中,方法返回JsonResult,一般我们这么写: [HttpPost] public JsonResult QueryFeature(string url, ...

  7. 使用JSON JavaScriptSerializer 进行序列化或反序列化时出错。字符串的长度超过了为 maxJsonLength属性

    "/"应用程序中的服务器错误.使用 JSON JavaScriptSerializer 进行序列化或反序列化时出错.字符串的长度超过了为 maxJsonLength 属性设置的值. ...

  8. 对 JSON 数据进行序列化和反序列化

    如何:对 JSON 数据进行序列化和反序列化 2017/03/30 作者 JSON(JavaScript 对象符号)是一种高效的数据编码格式,可用于在客户端浏览器和支持 AJAX 的 Web 服务之间 ...

  9. 使用 JSON JavaScriptSerializer 进行序列化或反序列化时出错

    如题 报错提示: 使用 JSON JavaScriptSerializer 进行序列化或反序列化时出错.字符串的长度超过了为 maxJsonLength 属性设置的值.","Sta ...

  10. ng json格式的序列化和反序列化

    ng中自带方法 angular.toJson 序列化angular.fromJson 反序列化 结果: 代码: <!DOCTYPE html> <html ng-app=" ...

随机推荐

  1. @Required @Autowired @Resource注解详解

    一.@Required注解用于检查特定的属性是否设置 1.RequiredAnnotationBeanPostProcessor 为该注解的处理器,即bean后置处理器,检查所有带有该解的bean属性 ...

  2. (转).net Application.DoEvents()的作用

    原文地址:http://blog.csdn.net/weinierbian/article/details/6231589 Application.DoEvents()的作用:处理所有的当前在消息队列 ...

  3. (转)windows下配置nginx+php环境

    原文地址 http://www.cnblogs.com/huayangmeng/archive/2011/06/15/2081337.html 刚看到nginx这个词,我很好奇它的读法(engine ...

  4. ASP.NET MVC开发微信(三)

  5. php 深入理解addslashes函数

    php addslashes函数对于很多人来说并不陌生,但很大部分人只是了解皮毛,只知道addslashes函数是在特定字符前面加上反斜杠,本文章将带大家深入理解php addslashes函数的使用 ...

  6. MFC创建非模态对话框并修改CStatic文字

    //由IDD_STATUS_DIALOG创建一个对话框CDialog* pCheckNetStatusDlg = new CDialog(); pCheckNetStatusDlg->Creat ...

  7. 在虚拟机上安装红帽Linux.5.5.for.x86.服务器版系统(按针对安装oracle 10g作的配置)

    在虚拟机上安装红帽Linux.5.5.for.x86.服务器版系统(按针对安装oracle 10g作的配置)   软件版本: 虚拟机版本:vmwareworkstation 7.11 build-28 ...

  8. Python安装Selenium3

    概述 2016.10.13,Selenium3.0正式发布,官方说明如下: The major change in Selenium 3.0 is we're removing the origina ...

  9. react与jQuery对比,有空的时候再翻译一下

    参考资料:http://reactfordesigners.com/labs/reactjs-introduction-for-people-who-know-just-enough-jquery-t ...

  10. SMTP邮件发送命令

    第一步,远程登录smtp服务器 在命令行窗口输入 telnet smtp.163.com 25 然后回车第二步,用户登录 输入 helo 163.com 回车,这是向服务器表明你的用户身份250 OK ...