扩展方法对json序列化及反序列化
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了扩展方法对json序列化及反序列化相关的知识,希望对你有一定的参考价值。
this+类型名+变量名,.NET 3.0 之后新增的一种特性,叫“扩展方法”。
int类型变量都能调用toString()方法,将int类型变量转换成string型变量;如果需要更改转换的形式,比如将int类型变量转换成指定格式的字符串,并且这种方法调用非常频繁,可以编写扩展方法。扩展方法能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用。
例如下列代码:
namespace ExtensionMethods { public static class MyExtensions { public static int zzyhost(this String str) { return 0; } } }
那么在其他类下只需要 using ExtensionMethods引入该命名空间;,所有 string 类型的对象就都拥有了 zzyhost() 这个方法,而无需重写一个 string 类,使用时直接调用:
string s = "Hello zzyhost"; int i = s.zzyhost();
在做web项目时,经常要将对象转json,所以可以将转换方法写成扩展方法,在转换时直接调用。
扩展方法:
/******************************************************************************** ** Title: SerializerUtil ** Author: dwx ** E-mail [email protected] ** Date: 2017/5/12 9:12:34 ** CLR: 4.0.30319.34209 ** Copyright: Copyright (c) 2017 ** Company: GDwinning ** Description:json序列化扩展方法 *********************************************************************************/ using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Runtime.Serialization.Json; using System.Text; using System.Threading.Tasks; using System.Runtime.Serialization; namespace BLL.Tool { /// <summary> /// 扩展方法,json序列化 /// </summary> public static class JsonSerializerUtil { /// <summary> /// json字符串反序列化 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="jsonStr"></param> /// <returns></returns> public static T FromJson<T>(this string jsonStr) { try { DataContractJsonSerializer seri = new DataContractJsonSerializer(typeof(T)); using (MemoryStream memory = new MemoryStream(Encoding.UTF8.GetBytes(jsonStr))) { T jsonObj = (T)seri.ReadObject(memory); return jsonObj; } } catch { return default(T);//如果有异常会返回null } } /// <summary> /// json序列化 /// </summary> /// <param name="item"></param> /// <returns></returns> public static string ToJson(this object item) { try { DataContractJsonSerializer serializer = new DataContractJsonSerializer(item.GetType()); using (MemoryStream ms = new MemoryStream()) { serializer.WriteObject(ms, item); StringBuilder sb = new StringBuilder(); sb.Append(Encoding.UTF8.GetString(ms.ToArray())); return sb.ToString(); } } catch (Exception ex) { return "异常信息:" + ex.Message; } } } }
调用扩展方法示例:
result res=new result(); string data=null; //对象序列化 data = res.ToJson(); //json字符串反序列化 result newRes=new result(); newRes=data.FromJson<result>();
以上是关于扩展方法对json序列化及反序列化的主要内容,如果未能解决你的问题,请参考以下文章