1. 程式人生 > >擴展方法對json序列化及反序列化

擴展方法對json序列化及反序列化

runt mes get int esp () exceptio new ask

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序列化及反序列化