一般项目中我们经常用到数据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. java练习---12

    public class L1106 { public static void main(String[] args) { // TODO Auto-generated method stub Tes ...

  2. [译].Net中的内存

    原文链接:https://jonskeet.uk/csharp/memory.html 人们在理解值类型和引用类型之间的差异时因为“值类型在栈上分配,引用类型在堆上分配”这句话造成了很多混乱.这完全是 ...

  3. Mysql处理中文乱码的问题

    一开始在创建完毕数据库和数据表之后,插入中文发现在mysql命令行和在sqlyog终端上看都是乱码,查看了一些文章,写的内容都一样,无非是如下几个步骤: 1:修改数据库字符集为utf8 2:修改数据表 ...

  4. TCP三次握手和断开四次挥手

    TCP三次握手 1主机A发送消息请求与主机B连接 2主机B回复消息同意与主机A连接 3主机A确认主机B的同意连接,并建立连接 TCP的四次挥手 1客户端发送FIN到服务器,请求关闭与服务器的连接(意思 ...

  5. Linux学习笔记03

    一.Linux常见命令 file:查看文件类型(windows用扩展名识别文件类型) 语法:file [options] [args] -b:显示结果时,不显示文件名 -c:显示执行file命令的执行 ...

  6. C# 委托(delegate)、泛型委托和Lambda表达式

    目录 # 什么是委托 # 委托声明.实例化和调用 1.声明 2.委托的实例化 3.委托实例的调用 4.委托完整的简单示例 #泛型委托 1.Func委托 2.Action委托 3.Predicate委托 ...

  7. Selenium+java - 弹出框处理

    一.弹出框分类: 弹出框分为两种,一种基于原生JavaScript写出来的弹窗,另一种是自定义封装好的样式的弹出框,本文重点介绍原生JavaScript写出来的弹窗,另一种弹窗用click()基本就能 ...

  8. IO流的Properties集合,序列化流与反序列化流,打印流及commons-IO

    内容介绍 Properties集合 序列化流与反序列化流 打印流 commons-IO Properties类 Properties类介绍 Properties 类表示了一个持久的属性集.Proper ...

  9. Python基础总结之异常、调试代码第十二天开始(新手可相互督促)

    年薪20万的梦想,加油! 我们在写代码的时候,控制台经常会报错,因为某种错误,导致我们的程序停止,且不再运行下面的代码. 我们看一个错误的代码示例: def add_1(): #没有参数 print( ...

  10. JavaFX 集成 Sqlite 和 Hibernate 开发爬虫应用

    目录 [隐藏] 0.1 前言: 0.2 界面 0.3 Maven 环境 0.4 项目结构 0.5 整合 Hibernate 0.5.1 SQLiteDialect.java 数据库方言代码 0.5.2 ...