一般项目中我们经常用到数据Json的序列化与反序列化,为了方便在需要的地方快速使用,一般建议都封装为静态扩展方法,在需要的地方可直接使用。

  而目前C#项目中序列化一般都是用的 Newtonsoft.Json 来做的,因此这里贴出通用静态扩展方法供大家参考。

PS:若要添加此扩展方法,必须得在Nuget包中添加  Newtonsoft.Json  的引用。

using System;
using System.Collections.Generic;
using System.Text;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Serialization; namespace DemoFrame_Basic.Extensions
{
/// <summary>
/// 静态帮助类
/// </summary>
public static class ObjStrExtension
{
/// <summary>
/// 返回Json字符串
/// </summary>
/// <param name="obj">需要序列化的对象 例:T.ToJson()</param>
/// <param name="isNullValueHandling">是否忽略Null字段,最终字符串中是否包含Null字段</param>
/// <param name="indented">是否展示为具有Json格式的字符串</param>
/// <param name="isLowCase">是否忽略大小写</param>
/// <param name="dateTimeFormat">时间转换格式</param>
/// <returns>Json字符串</returns>
public static string ToJson(this object obj, bool isNullValueHandling = false, bool indented = false, bool isLowCase = false, string dateTimeFormat = "yyyy-MM-dd HH:mm:ss")
{
var options = new JsonSerializerSettings(); if (indented)
options.Formatting = Formatting.Indented;
if (isLowCase)
{
options.ContractResolver = new CamelCasePropertyNamesContractResolver();
}
if (isNullValueHandling)
options.NullValueHandling = NullValueHandling.Ignore;
options.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
options.Converters = new List<JsonConverter> { new IsoDateTimeConverter { DateTimeFormat = dateTimeFormat } };
return obj.ToJson(options);
}
/// <summary>
/// Json字符串
/// </summary>
/// <param name="obj">需要序列化的对象 例:T.ToJson(settings)</param>
/// <param name="settings">Json序列化设置</param>
/// <returns>Json字符串</returns>
public static string ToJson(this object obj, JsonSerializerSettings settings)
{
return JsonConvert.SerializeObject(obj, settings);
}
/// <summary>
/// 返回相关设定格式字符串
/// </summary>
/// <param name="obj"></param>
/// <param name="format">格式 例:yyyy-MM-dd HH:mm:ss</param>
/// <returns>设定格式字符串</returns>
public static string ToDateTimeString(this object obj, string format)
{
DateTime.TryParse(obj?.ToString(), out var dateTime);
return dateTime.ToString(format);
}
/// <summary>
/// 得到字符串的Byte
/// </summary>
/// <param name="str"></param>
/// <returns>Byte</returns>
public static byte[] GetBytes(this string str)
{
if (string.IsNullOrEmpty(str))
return default(byte[]);
return Encoding.UTF8.GetBytes(str);
} public static bool ToBool(this string str, bool defaultValue = false)
{
bool.TryParse(str, out defaultValue);
return defaultValue;
} public static short ToShort(this string str, short defaultValue = )
{
short.TryParse(str, out defaultValue);
return defaultValue;
} public static int ToInt(this string str, int defaultValue = )
{
int.TryParse(str, out defaultValue);
return defaultValue;
} public static long ToLong(this string str, long defaultValue = )
{
long.TryParse(str, out defaultValue);
return defaultValue;
} public static double ToDouble(this string str, double defaultValue = )
{
double.TryParse(str, out defaultValue);
return defaultValue;
} public static TEnum ToEnum<TEnum>(this string str, bool ignoreCase = true, TEnum defaultValue = default(TEnum)) where TEnum : struct
{
Enum.TryParse(str, ignoreCase, out defaultValue);
return defaultValue;
} public static T ToNetType<T>(this string str, bool isIgnoreNull = true, bool isIgnoreEx = false)
{
var setting = new JsonSerializerSettings
{
NullValueHandling = isIgnoreNull ? NullValueHandling.Ignore : NullValueHandling.Include
};
try
{
if (string.IsNullOrEmpty(str))
{
return default(T);
}
else if ("\"\"" == str)
{
return default(T);
}
else
{
return JsonConvert.DeserializeObject<T>(str, setting);
}
}
catch (Exception)
{
if (!isIgnoreEx)
throw;
return default(T);
}
} public static T ToNetType<T>(this string str, JsonSerializerSettings settings)
{
try
{
if (string.IsNullOrEmpty(str))
{
return default(T);
}
else if ("\"\"" == str)
{
return default(T);
}
else
{
return JsonConvert.DeserializeObject<T>(str, settings);
}
}
catch (Exception)
{ return default(T);
}
} /// <summary>
/// 比较是否相等,忽略大小写
/// </summary>
/// <param name="a"></param>
/// <param name="b"></param>
/// <returns></returns>
public static bool EqualsIgnoreCase(this string a, string b)
{
if (a != null)
return a.Equals(b, StringComparison.CurrentCultureIgnoreCase);
return b == null;
}
}
}

C#之项目常用方法之静态扩展的更多相关文章

  1. 擦他丫的,今天在Django项目中引用静态文件jQuery.js 就是引入报错,终于找到原因了!

    擦 ,今天在Django项目中引用静态文件jQuery.js 就是引入报错,终于找到原因了! 问题在于我使用的谷歌浏览器,默认使用了缓存,导致每次访问同一个url时,都返回的是缓存里面的东西.通过谷歌 ...

  2. c#静态扩展方法,字典的克隆扩展方法

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  3. Unity 游戏框架搭建 (十八) 静态扩展 + 泛型实现transform的链式编程

    本篇文章介绍如何实现如下代码的链式编程: C# this.Position(Vector3.one) .LocalScale(1.0f) .Rotation(Quaternion.identity); ...

  4. Unity 游戏框架搭建 (十七) 静态扩展GameObject实现链式编程

    本篇本来是作为原来 优雅的QChain的第一篇的内容,但是QChain流产了,所以收录到了游戏框架搭建系列.本篇介绍如何实现GameObject的链式编程. 链式编程的实现技术之一是C#的静态扩展.静 ...

  5. Spring Boot 设置项目名后静态文件相对路径问题

    出现问题的原因 server.servlet.context-path=testDemospring.mvc.static-path-pattern=/static/**定义项目名和静态资源路径后发现 ...

  6. Azure 项目构建 – 托管静态网站

    本课程主要介绍了如何在 Azure 平台上快速构建和部署基于 Azure Web 应用的静态托管网站, 实践讲解如何使用 Azure 门户创建 Web 应用, 部署静态网站源代码,设置自定义域名等. ...

  7. 在MVC的项目中访问静态页面

    MVC在生成项目的时候会生成的WEB-INF底下.这个文件夹下面的文件是受保护的,都会走MVC的流程, 但是我希望在WebContent底下可以使用静态页面, 那么需要进入springmvc-serv ...

  8. 关于linux下部署JavaWeb项目,nginx负责静态资源访问,tomcat负责处理动态请求的nginx配置

    1.项目的运行环境 linux版本 [root@localhost ~]# cat /proc/version Linux version -.el6.x86_64 (mockbuild@x86-.b ...

  9. 记一次vue2项目部署nginx静态文件404解决过程

    github上下的一个vue2的项目,运行可以的,webpack打包后,nginx请求报错: 发现路径很奇怪啊,所以果断来到build.js文件中看看是不是哪里不对. 已经一番引用查找: 发现在这里配 ...

随机推荐

  1. 个人永久性免费-Excel催化剂功能第57波-一键生成完全组合的笛卡尔积结果表

    在数据库的多表查询中,通常会有各种连接关系,同样地在Excel环境中,也有很大的场景需要用到类似数据库的多表查询,如经典的VLOOKUP就是其中一种类似LEFT JOIN查询的查询效果.在很多时候需要 ...

  2. Java map笔记

    Map 是一个键值对的集合 花和尚 豹子头 鲁智深 林冲 如果想要从map中获得值,可以根据键 Map<Key,velue> Map虽然是集合,但是和collection的接口无关 我们可 ...

  3. 快速掌握mongoDB(五)——读写分离的副本集实现和Sharing介绍

    1 mongoDB副本集 1 副本集简介 前边我们介绍都是单机MongoDB的使用,在实际开发中很少会用单机MongoDB,因为使用单机会有数据丢失的风险,同时单台服务器无法做到高可用性(即当服务器宕 ...

  4. LiteDB源码解析系列(1)LiteDB介绍

    最近利用端午假期,我把LiteDB的源码仔细的阅读了一遍,酣畅淋漓,确实收获了不少.后面将编写一系列关于LteDB的文章分享给大家,希望这么好的源码不要被埋没. 1.LiteDB是什么 这是一个小型的 ...

  5. python requests、xpath爬虫增加博客访问量

    这是一个分析IP代理网站,通过代理网站提供的ip去访问CSDN博客,达到以不同ip访同一博客的目的,以娱乐为主,大家可以去玩一下. 首先,准备工作,设置User-Agent: #1.headers h ...

  6. thymeleaf介绍

    作者:纯洁的微笑出处:http://www.ityouknow.com/  增加了一小部分内容 简单说, Thymeleaf 是一个跟 Velocity.FreeMarker 类似的模板引擎,它可以完 ...

  7. 关于定时器Scheduled(cron)的问题

    定时器配置步骤参考:http://blog.csdn.NET/sd4000784/article/details/7745947 下面给出cron参数中各个参数的含义: CRON表达式    含义 & ...

  8. MyBatis 核心配置综述之 ParameterHandler

    目录 ParameterHandler 简介 ParameterHandler 创建 ParameterHandler 中的参数从何而来 ParameterHandler 解析 MyBatis 四大核 ...

  9. 史上最全面的SignalR系列教程-1、认识SignalR

    SignalR 是什么? SignalR 是一个面向 ASP.NET 开发人员的库,可简化将实时 web 功能添加到应用程序的过程. 实时 web 功能是让服务器代码将内容推送到连接的客户端立即可用, ...

  10. 【Java例题】2.2 分数类

    2.定义分数类,包括分子和分母变量.构造方法. 加减乘除方法.化简方法.值计算方法和显示分子和分母的方法. 然后编写一个主类,在其主方法中通过定义两个分数对象来 显示每一个分数的分子值.分母值.化简和 ...