C#之项目常用方法之静态扩展
一般项目中我们经常用到数据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#之项目常用方法之静态扩展的更多相关文章
- 擦他丫的,今天在Django项目中引用静态文件jQuery.js 就是引入报错,终于找到原因了!
擦 ,今天在Django项目中引用静态文件jQuery.js 就是引入报错,终于找到原因了! 问题在于我使用的谷歌浏览器,默认使用了缓存,导致每次访问同一个url时,都返回的是缓存里面的东西.通过谷歌 ...
- c#静态扩展方法,字典的克隆扩展方法
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- Unity 游戏框架搭建 (十八) 静态扩展 + 泛型实现transform的链式编程
本篇文章介绍如何实现如下代码的链式编程: C# this.Position(Vector3.one) .LocalScale(1.0f) .Rotation(Quaternion.identity); ...
- Unity 游戏框架搭建 (十七) 静态扩展GameObject实现链式编程
本篇本来是作为原来 优雅的QChain的第一篇的内容,但是QChain流产了,所以收录到了游戏框架搭建系列.本篇介绍如何实现GameObject的链式编程. 链式编程的实现技术之一是C#的静态扩展.静 ...
- Spring Boot 设置项目名后静态文件相对路径问题
出现问题的原因 server.servlet.context-path=testDemospring.mvc.static-path-pattern=/static/**定义项目名和静态资源路径后发现 ...
- Azure 项目构建 – 托管静态网站
本课程主要介绍了如何在 Azure 平台上快速构建和部署基于 Azure Web 应用的静态托管网站, 实践讲解如何使用 Azure 门户创建 Web 应用, 部署静态网站源代码,设置自定义域名等. ...
- 在MVC的项目中访问静态页面
MVC在生成项目的时候会生成的WEB-INF底下.这个文件夹下面的文件是受保护的,都会走MVC的流程, 但是我希望在WebContent底下可以使用静态页面, 那么需要进入springmvc-serv ...
- 关于linux下部署JavaWeb项目,nginx负责静态资源访问,tomcat负责处理动态请求的nginx配置
1.项目的运行环境 linux版本 [root@localhost ~]# cat /proc/version Linux version -.el6.x86_64 (mockbuild@x86-.b ...
- 记一次vue2项目部署nginx静态文件404解决过程
github上下的一个vue2的项目,运行可以的,webpack打包后,nginx请求报错: 发现路径很奇怪啊,所以果断来到build.js文件中看看是不是哪里不对. 已经一番引用查找: 发现在这里配 ...
随机推荐
- canvas的width和height设置问题
最近在学习canvas属性中遇到一个小问题,就是canvas的width和height设置问题 代码如下: <!DOCTYPE html> <html lang="en&q ...
- Error:too many padding sections on bottom border.
异常信息: Error:too many padding sections on bottom border. 原因: 使用andoridstudio制作.9图错误. 解决 只怪我把线画多了. 修改后 ...
- C#3.0新增功能09 LINQ 基础07 LINQ 中的查询语法和方法语法
连载目录 [已更新最新开发文章,点击查看详细] 介绍性的语言集成查询 (LINQ) 文档中的大多数查询是使用 LINQ 声明性查询语法编写的.但是在编译代码时,查询语法必须转换为针对 .NET ...
- 前端响应式のmedia文件分离
响应式cssのmedia文件分离 media简介 1.媒体查询,添加自CSS3 2.一个媒体查询由一个可选的媒体类型和零个或多个使用媒体功能的限制了样式表范围的表达式组成,允许内容的呈现针对一个特定范 ...
- mysql查询表所有列名,并用逗号分隔
SELECT GROUP_CONCAT(COLUMN_NAME SEPARATOR ",") FROM information_schema.COLUMNS WHERE TABLE ...
- Oracle JDK与OpenJDK到底有什么不同?
不知道各位developer平时是否有过疑问,Oracle JDK是什么,OpenJDK又是什么? Oracle JDK便是平常我们在windows系统上做开发使用的JDK,又称作SUN JDK.O ...
- Mysql 学校信息管理系统
1.创建数据库语句: #创建数据库 CREATE DATABASE `schoolDB`; USE `schoolDB`; #创建学生表 CREATE TABLE `student`( `sid` I ...
- springboot-rabbitMQ
作者:纯洁的微笑出处:http://www.ityouknow.com/ 版权所有,欢迎保留原文链接进行转载:) RabbitMQ 即一个消息队列,主要是用来实现应用程序的异步和解耦,同时也能起到消息 ...
- 2019.7 佳木斯培训A层
day1题目及题解 day2题目及题解 day3题目及题解 day4题目及题解 day5题目及题解
- 【python-django后端开发】Redis缓存配置使用详细教程!!!
官方查阅资料:https://django-redis-chs.readthedocs.io/zh_CN/latest/ 1. 安装django-redis扩展包 1.安装django-redis扩展 ...