淺談C# 序列化與反序列化幾種格式的轉(zhuǎn)換
這里介紹了幾種方式之間的序列化與反序列化之間的轉(zhuǎn)換
首先介紹的如何序列化,將object對(duì)象序列化常見的兩種方式即string和xml對(duì)象;
第一種將object轉(zhuǎn)換為string對(duì)象,這種比較簡(jiǎn)單沒有什么可談的;
public string ScriptSerialize<T>(T t)
{
JavaScriptSerializer serializer = new JavaScriptSerializer();
return serializer.Serialize(t);
}
第二種將object轉(zhuǎn)換為xml對(duì)象:
public string ScriptSerializeToXML<T>(T t)
{
XmlSerializer serializer = new XmlSerializer(typeof(T));
MemoryStream mem = new MemoryStream();
XmlTextWriter writer = new XmlTextWriter(mem,Encoding.UTF8);
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("","");
serializer.Serialize(writer,t,ns);
writer.Close();
return Encoding.UTF8.GetString(mem.ToArray());
}
下面我主要講string對(duì)象反序列化為對(duì)應(yīng)的對(duì)象;
一、將string對(duì)象反序列化為object對(duì)象
public T ScriptDeserialize<T>(string strJson)
{
JavaScriptSerializer serializer = new JavaScriptSerializer();
return serializer.Deserialize<T>(strJson);
}
二、將string對(duì)象反序列化為list對(duì)象
public List<T> JSONStringToList<T>(string strJson)
{
JavaScriptSerializer serializer = new JavaScriptSerializer();
List<T> objList = serializer.Deserialize<List<T>>(strJson);
return objList;
}
三、將string對(duì)象反序列化為datatable對(duì)象
public DataTable JSONStringToDataTable<T>(string strJson)
{
DataTable dt = new DataTable();
if (strJson.IndexOf("[") > -1)//如果大于則strJson存放了多個(gè)model對(duì)象
{
strJson = strJson.Remove(strJson.Length - 1, 1).Remove(0, 1).Replace("},{", "};{");
}
JavaScriptSerializer serializer = new JavaScriptSerializer();
string[] items = strJson.Split(';');
foreach (PropertyInfo property in typeof(T).GetProperties())//通過反射獲得T類型的所有屬性
{
DataColumn col = new DataColumn(property.Name,property.PropertyType);
dt.Columns.Add(col);
}
//循環(huán) 一個(gè)一個(gè)的反序列化
for (int i = 0; i < items.Length; i++)
{
DataRow dr = dt.NewRow();
//反序列化為一個(gè)T類型對(duì)象
T temp = serializer.Deserialize<T>(items[i]);
foreach (PropertyInfo property in typeof(T).GetProperties())
{
dr[property.Name] = property.GetValue(temp,null);
}
dt.Rows.Add(dr);
}
return dt;
}
四、將xml對(duì)象反序列化為object對(duì)象
public T JSONXMLToObject<T>(string strJson)
{
XmlDocument xdoc = new XmlDocument();
try
{
xdoc.LoadXml(strJson);
XmlNodeReader reader = new XmlNodeReader(xdoc.DocumentElement);
XmlSerializer ser = new XmlSerializer(typeof(T));
object obj = ser.Deserialize(reader);
return (T)obj;
}
catch
{
return default(T);
}
}
現(xiàn)在用具體的實(shí)例來如何調(diào)用他們呢?特別要注意的是將xml對(duì)象反序列化objcet對(duì)象
public class LoginObject
{
public string Account { get; set;}
public string Password { get; set;}
}
LoginObject loginObject = new LoginObject { Account = account, Password = password };
ExTools.Manage.Class.CScriptSerialize Serialize = new Class.CScriptSerialize();
//將object對(duì)象轉(zhuǎn)換為string
string strJson=Serialize.ScriptSerialize(loginObject);
//將object對(duì)象轉(zhuǎn)換為xml對(duì)象
string strJson = Serialize.ScriptSerializeToXML(loginObject);
//轉(zhuǎn)換為list對(duì)象
List<LoginObject> list = Serialize.JSONStringToList<LoginObject>(strJson);
//將一個(gè)xml對(duì)象轉(zhuǎn)換為object對(duì)象
strJson = strJson.Substring(1, strJson.Length - 1);
loginObject = Serialize.JSONXMLToObject<LoginObject>(strJson);
//將字符串轉(zhuǎn)換為dataTable
DataTable dt = Serialize.JSONStringToDataTable<LoginObject>(strJson);
//將字符串轉(zhuǎn)換為object對(duì)象
loginObject = Serialize.ScriptDeserialize<LoginObject>(strJson);
以上這篇淺談C# 序列化與反序列化幾種格式的轉(zhuǎn)換就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- C#實(shí)現(xiàn)XML與實(shí)體類之間相互轉(zhuǎn)換的方法(序列化與反序列化)
- C#實(shí)現(xiàn)xml文件反序列化讀入數(shù)據(jù)到object的方法
- C#序列化與反序列化(Serialize,Deserialize)實(shí)例詳解
- C#實(shí)現(xiàn)的json序列化和反序列化代碼實(shí)例
- C#反序列化到類的實(shí)現(xiàn)方法
- C#實(shí)現(xiàn)Xml序列化與反序列化的方法
- C#實(shí)現(xiàn)復(fù)雜XML的序列化與反序列化
- c#對(duì)象反序列化與對(duì)象序列化示例詳解
- c#正反序列化XML文件示例(xml序列化)
相關(guān)文章
C#使用Mutex簡(jiǎn)單實(shí)現(xiàn)程序單實(shí)例運(yùn)行的方法
這篇文章主要介紹了C#使用Mutex簡(jiǎn)單實(shí)現(xiàn)程序單實(shí)例運(yùn)行的方法,涉及C#實(shí)現(xiàn)單實(shí)例程序運(yùn)行的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-09-09

