浅谈C# 序列化与反序列化几种格式的转换
这里介绍了几种方式之间的序列化与反序列化之间的转换
首先介绍的如何序列化,将object对象序列化常见的两种方式即string和xml对象;
第一种将object转换为string对象,这种比较简单没有什么可谈的;
publicstringScriptSerialize<T>(Tt)
{
JavaScriptSerializerserializer=newJavaScriptSerializer();
returnserializer.Serialize(t);
}
第二种将object转换为xml对象:
publicstringScriptSerializeToXML<T>(Tt)
{
XmlSerializerserializer=newXmlSerializer(typeof(T));
MemoryStreammem=newMemoryStream();
XmlTextWriterwriter=newXmlTextWriter(mem,Encoding.UTF8);
XmlSerializerNamespacesns=newXmlSerializerNamespaces();
ns.Add("","");
serializer.Serialize(writer,t,ns);
writer.Close();
returnEncoding.UTF8.GetString(mem.ToArray());
}
下面我主要讲string对象反序列化为对应的对象;
一、将string对象反序列化为object对象
publicTScriptDeserialize<T>(stringstrJson)
{
JavaScriptSerializerserializer=newJavaScriptSerializer();
returnserializer.Deserialize<T>(strJson);
}
二、将string对象反序列化为list对象
publicList<T>JSONStringToList<T>(stringstrJson)
{
JavaScriptSerializerserializer=newJavaScriptSerializer();
List<T>objList=serializer.Deserialize<List<T>>(strJson);
returnobjList;
}
三、将string对象反序列化为datatable对象
publicDataTableJSONStringToDataTable<T>(stringstrJson)
{
DataTabledt=newDataTable();
if(strJson.IndexOf("[")>-1)//如果大于则strJson存放了多个model对象
{
strJson=strJson.Remove(strJson.Length-1,1).Remove(0,1).Replace("},{","};{");
}
JavaScriptSerializerserializer=newJavaScriptSerializer();
string[]items=strJson.Split(';');
foreach(PropertyInfopropertyintypeof(T).GetProperties())//通过反射获得T类型的所有属性
{
DataColumncol=newDataColumn(property.Name,property.PropertyType);
dt.Columns.Add(col);
}
//循环一个一个的反序列化
for(inti=0;i<items.Length;i++)
{
DataRowdr=dt.NewRow();
//反序列化为一个T类型对象
Ttemp=serializer.Deserialize<T>(items[i]);
foreach(PropertyInfopropertyintypeof(T).GetProperties())
{
dr[property.Name]=property.GetValue(temp,null);
}
dt.Rows.Add(dr);
}
returndt;
}
四、将xml对象反序列化为object对象
publicTJSONXMLToObject<T>(stringstrJson)
{
XmlDocumentxdoc=newXmlDocument();
try
{
xdoc.LoadXml(strJson);
XmlNodeReaderreader=newXmlNodeReader(xdoc.DocumentElement);
XmlSerializerser=newXmlSerializer(typeof(T));
objectobj=ser.Deserialize(reader);
return(T)obj;
}
catch
{
returndefault(T);
}
}
现在用具体的实例来如何调用他们呢?特别要注意的是将xml对象反序列化objcet对象
publicclassLoginObject
{
publicstringAccount{get;set;}
publicstringPassword{get;set;}
}
LoginObjectloginObject=newLoginObject{Account=account,Password=password};
ExTools.Manage.Class.CScriptSerializeSerialize=newClass.CScriptSerialize();
//将object对象转换为string
stringstrJson=Serialize.ScriptSerialize(loginObject);
//将object对象转换为xml对象
stringstrJson=Serialize.ScriptSerializeToXML(loginObject);
//转换为list对象
List<LoginObject>list=Serialize.JSONStringToList<LoginObject>(strJson);
//将一个xml对象转换为object对象
strJson=strJson.Substring(1,strJson.Length-1);
loginObject=Serialize.JSONXMLToObject<LoginObject>(strJson);
//将字符串转换为dataTable
DataTabledt=Serialize.JSONStringToDataTable<LoginObject>(strJson);
//将字符串转换为object对象
loginObject=Serialize.ScriptDeserialize<LoginObject>(strJson);
以上这篇浅谈C#序列化与反序列化几种格式的转换就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。