標籤:contract 序列化 returns catch ons tps 字元 hfs collect
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序列化及還原序列化