c#c xml 序列化化反序列化的问题

c#实现序列化反序列化对象
c#实现序列化反序列化对象
需求:将通信的参数按数据块的方式传输,便于封装和解析,可读性更强
方法1、按xml的方式序列化反序列化(using System.Xml.Susing
System.IO;)
1)将要传输的数据块定义成结构体类型:
[Serializable]
&&& public
struct FlamoutMovement
public string Pass { }
public int TimeThreshold { }
public int DistanceThreshold { }
2)发送时序列化要传送的数据
&&&&&&&&&&&&&&&
FlamoutMovement flameoutMovement = new FlamoutMovement();
&&&&&&&&&&&&&&&
flameoutMovement.Pass="abc";
&&&&&&&&&&&&&&&
flameoutMovement.TimeThreshold=30;
&&&&&&&&&&&&&&&
flameoutMovement.DistanceThreshold=500;
&&&&&&&&&&&&&&&
XmlSerializer serializer = new
XmlSerializer(typeof(FlamoutMovement));
&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&
MemoryStream stream = new MemoryStream();
&&&&&&&&&&&&&&&
serializer.Serialize(stream, flameoutMovement);
&&&&&&&&&&&&&&&
stream.Seek(0, SeekOrigin.Begin);
&&&&&&&&&&&&&&&
string s = enc.GetString(stream.ToArray());
3)接收到数据时再反序列化
&&&&&&&&&&&&&&&
MemoryStream stream = new
MemoryStream(Encoding.ASCII.GetBytes(deviceMessage.synchroControlMessage.parameters));&
&&&&&&&&&&&&&&&&XmlSerializer
serializer = new XmlSerializer(typeof(FlamoutMovement));
&&&&&&&&&&&&&&&
FlamoutMovement flamoutMovement =
(FlamoutMovement)serializer.Deserialize(stream);
方法二:通过json来序列化和反序列化要传送的数据
1)将要传输的数据块定义成结构体类型:
&&& public
struct FlamoutMovement
public string Pass { }
public int TimeThreshold { }
public int DistanceThreshold { }
2)将要发送的数据序列化成json字符串
注意:需要引用Newtonsoft.Json.Net35.dll动态库
&&&&&&&&&&&&&&&
FlamoutMovement flameoutMovement = new FlamoutMovement();
&&&&&&&&&&&&&&&
flameoutMovement.Pass="abc";
&&&&&&&&&&&&&&&
flameoutMovement.TimeThreshold=30;
&&&&&&&&&&&&&&&
flameoutMovement.DistanceThreshold=500;
&&&&&&&&&&&&&&&
string s =
Newtonsoft.Json.JsonConvert.SerializeObject(flameoutMovement);
3)接收到数据后再反序列化出来
&&&&&&&&&&&&&&
FlamoutMovementTwo flameoutMovement
=(FlamoutMovementTwo)Newtonsoft.Json.JsonConvert.DeserializeObject(deviceMessage.synchroControlMessage.parameters,typeof(FlamoutMovementTwo));
两种方法的优缺点:
JSON与XML最大的不同在于XML是一个完整的标记语言,而JSON不是。这使得XML在程式判读上需要比较多的功夫。主要的原因在于XML的设计理念与JSON不同。XML利用标记语言的特性提供了绝佳的延展性(如XPath),在数据存储,扩展及高级检索方面具备对JSON的优势,而JSON则由于比XML更加小巧,以及浏览器的内建快速解析支持,使得其更适用于网络数据传输领域。
序列化后的xml字符串更长,json字符串简洁轻便。
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。求C# 对XML序列化与反序列化实例
[问题点数:20分,结帖人gdmvip]
求C# 对XML序列化与反序列化实例
[问题点数:20分,结帖人gdmvip]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
相关帖子推荐:
2011年4月 .NET技术大版内专家分月排行榜第二
2011年3月 .NET技术大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。C# 序列化与反序列化几种格式之间的转换 - 谷普下载 |
| 您所在的位置: >
> C# 序列化与反序列化几种格式之间的转换C# 序列化与反序列化几种格式之间的转换编辑:玩电脑&&&&来源:谷普下载站&&&&更新:&&&&人气:加载中...&&&&字号:|标签:&&&&&&&&&&
这里介绍了方式之序列化与反序列化之首先介绍的如何序列化,将object对象序列化常见的两种方式即string和xml对象;第一种将object为string对象,,这种比较简单没有什么可谈的; public string ScriptSerialize&T&(T t)
JavaScriptSerializer serializer = new JavaScriptSerializer();
return serializer.Serialize(t);
}第二种将object转换为xml对象: 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对象反序列化为对应的对象;一、将string对象反序列化为object对象 public T ScriptDeserialize&T&(string strJson)
JavaScriptSerializer serializer = new JavaScriptSerializer();
return serializer.Deserialize&T&(strJson);
}二、将string对象反序列化为list对象 public List&T& JSONStringToList&T&(string strJson)
JavaScriptSerializer serializer = new JavaScriptSerializer();
List&T& objList = serializer.Deserialize&List&T&&(strJson);
return objL
}三、将string对象反序列化为datatable对象
public DataTable JSONStringToDataTable&T&(string strJson)
DataTable dt = new DataTable();
if (strJson.IndexOf(&[&) & -1)//如果大于则strJson存放了多个model对象
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);
//循环 一个一个的反序列化
for (int i = 0; i & items.L i++)
DataRow dr = dt.NewRow();
//反序列化为一个T类型对象
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);
}四、将xml对象反序列化为object对象public T JSONXMLToObject&T&(string strJson)
XmlDocument xdoc = new XmlDocument();
xdoc.LoadXml(strJson);
XmlNodeReader reader = new XmlNodeReader(xdoc.DocumentElement);
XmlSerializer ser = new XmlSerializer(typeof(T));
object obj = ser.Deserialize(reader);
return (T)
return default(T);
}现在用具体的实例来如何调用他们呢?特别要注意的是将xml对象反序列化objcet对象 public class LoginObject
public string Account {}
public string Password {}
LoginObject loginObject = new LoginObject { Account = account, Password = password };
ExTools.Manage.Class.CScriptSerialize Serialize = new Class.CScriptSerialize();
//将object对象转换为string
string strJson=Serialize.ScriptSerialize(loginObject);
//将object对象转换为xml对象
string strJson = 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
DataTable dt = Serialize.JSONStringToDataTable&LoginObject&(strJson);
//将字符串转换为object对象
loginObject = Serialize.ScriptDeserialize&LoginObject&(strJson);
评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
分类选择您可能在找这些当前访客身份:游客 [
:果真如此,ViewBag.XX不能与字段名同名。否则无法...
:第二个可以的!
:第一个方案,出乎意料。太有创造力了。
:引用来自“KavenSu”的评论 引用来自“不吃早餐的...
:引用来自“不吃早餐的猫”的评论 貌似delphi从哪...
:貌似delphi从哪个版本之后就内置源码格式化功能了...
:不错,貌似有直接的安装包了
今日访问:2
昨日访问:90
本周访问:230
本月访问:923
所有访问:8382
C# xml和对象的序列化与反序列化
发表于1年前( 23:54)&&
阅读(76)&|&评论()
0人收藏此文章,
本文导读:xml在项目中的应用非常广泛,比如可以用来作为不同模块之间接口交互的数据格式,或用来对数据进行本地化的存储(如配置文件)。命名空间System.Xml.Serialization提供了对xml进行反序列化及对对象序列化的功能,使用进来非常方便。C#中xml和对象的序列化与反序列化就要引用该命名空间
为什么要做序列化和反序列化?
.Net程序执行时,对象都驻留在内存中;内存中的对象如果需要传递给其他系统使用;或者在关机时需要保存下来以便下次再次启动程序使用就需要序列化和反序列化。
一段最简单的Xml序列化代码
C# 代码 &&复制
class&Program{&&&&static&void&Main(string[]&args)&&&&{&&&&&&&&int&i&=&10;&&&&&&&&//声明Xml序列化对象实例serializer&&&&&&&&XmlSerializer&serializer&=&new&XmlSerializer(typeof(int));&&&&&&&&//执行序列化并将序列化结果输出到控制台&&&&&&&&serializer.Serialize(Console.Out,&i);&&&&&&&&Console.Read();&&&&}}
上面代码对int i进行了序列化,并将序列化的结果输出到了控制台,输出结果如下
&?xml&version="1.0"&encoding="gb2312"?&
&int&10&/int&
将上述序列化的xml进行反序列化,如下代码
C# 代码 &&复制
static&void&Main(string[]&args){&&&&using&(StringReader&rdr&=&new&StringReader(@"&?xml&version=""1.0""&encoding=""gb2312""?&&int&10&/int&"))&&&&{&&&&&&&&//声明序列化对象实例serializer&&&&&&&&&XmlSerializer&serializer&=&new&XmlSerializer(typeof(int));&&&&&&&&//反序列化,并将反序列化结果值赋给变量i&&&&&&&&int&i&=&(int)serializer.Deserialize(rdr);&&&&&&&&//输出反序列化结果&&&&&&&&Console.WriteLine("i&=&"&+&i);&&&&&&&&Console.Read();&&&&}}
以上代码用最简单的方式说明了xml序列化和反序列化的过程,.Net系统类库为我们做了大量的工作,序列化和反序列化都非常简单。但是在现实中业务需求往往比较复杂,不可能只简单的序列化一个int变量,显示中我们需要对复杂类型进行可控制的序列化。
System.Xml.Serialization类为我们提供了自己对象串行化(Serialize)和反串行化(Deserialize)的xml的方法,该类可以序列化的内容:
    公共类的公共读写字段或者属性    XmlElement对象    XmlNode对象    Dataset对象    实现了Icollection 或IEnumerable的类
下面介绍&XML序列化和反序列化 封装类
C# 代码 &&复制
using&Susing&System.Collections.Gusing&System.Lusing&System.Tusing&System.IO;using&System.Dusing&System.Xusing&System.Xml.S&///&&summary&///&Xml序列化与反序列化///&&/summary&public&class&XmlUtil{&&&&#region&反序列化&&&&///&&summary&&&&&///&反序列化&&&&///&&/summary&&&&&///&&param&name="type"&类型&/param&&&&&///&&param&name="xml"&XML字符串&/param&&&&&///&&returns&&/returns&&&&&public&static&object&Deserialize(Type&type,&string&xml)&&&&{&&&&&&&&try&&&&&&&&{&&&&&&&&&&&&using&(StringReader&sr&=&new&StringReader(xml))&&&&&&&&&&&&{&&&&&&&&&&&&&&&&XmlSerializer&xmldes&=&new&XmlSerializer(type);&&&&&&&&&&&&&&&&return&xmldes.Deserialize(sr);&&&&&&&&&&&&}&&&&&&&&}&&&&&&&&catch&(Exception&e)&&&&&&&&{&&&&&&&&&&&&&return&&&&&&&&&}&&&&}&&&&///&&summary&&&&&///&反序列化&&&&///&&/summary&&&&&///&&param&name="type"&&/param&&&&&///&&param&name="xml"&&/param&&&&&///&&returns&&/returns&&&&&public&static&object&Deserialize(Type&type,&Stream&stream)&&&&{&&&&&&&&XmlSerializer&xmldes&=&new&XmlSerializer(type);&&&&&&&&return&xmldes.Deserialize(stream);&&&&}&&&&#endregion&&&&&序列化}
该封装类的测试代码
1. 实体对象转换到Xml
C# 代码 &&复制
public&class&Student{&&&&public&string&Name&{&&&}&&&&public&int&Age&{&&&}}&Student&stu1&=&new&Student()&{&Name&=&"okbase",&Age&=&10&};string&xml&=&XmlUtil.Serializer(typeof(Student),&stu1);Console.Write(xml);
2. Xml转换到实体对象
Student stu2 = XmlUtil.Deserialize(typeof(Student), xml) as SConsole.Write(string.Format("名字:{0},年龄:{1}", stu2.Name, stu2.Age));
3、DataTable转换到Xml
C# 代码 &&复制
//&生成DataTable对象用于测试DataTable&dt1&=&new&DataTable("mytable");&&&//&必须指明DataTable名称&dt1.Columns.Add("Dosage",&typeof(int));dt1.Columns.Add("Drug",&typeof(string));dt1.Columns.Add("Patient",&typeof(string));dt1.Columns.Add("Date",&typeof(DateTime));&//&添加行dt1.Rows.Add(25,&"Indocin",&"David",&DateTime.Now);dt1.Rows.Add(50,&"Enebrel",&"Sam",&DateTime.Now);dt1.Rows.Add(10,&"Hydralazine",&"Christoff",&DateTime.Now);dt1.Rows.Add(21,&"Combivent",&"Janet",&DateTime.Now);dt1.Rows.Add(100,&"Dilantin",&"Melanie",&DateTime.Now);&//&序列化xml&=&XmlUtil.Serializer(typeof(DataTable),&dt1);Console.Write(xml);
4. Xml转换到DataTable&
C# 代码 &&复制
//&反序列化DataTable&dt2&=&XmlUtil.Deserialize(typeof(DataTable),&xml)&as&DataT&//&输出测试结果foreach&(DataRow&dr&in&dt2.Rows){&&&&foreach&(DataColumn&col&in&dt2.Columns)&&&&{&&&&&&&&Console.Write(dr[col].ToString()&+&"&");&&&&}&&&&&Console.Write("\\r\\n");}
5. List转换到Xml&
C# 代码 &&复制
//&生成List对象用于测试List&Student&&list1&=&new&List&Student&(3);&list1.Add(new&Student()&{&Name&=&"okbase",&Age&=&10&});list1.Add(new&Student()&{&Name&=&"csdn",&Age&=&15&});//&序列化xml&=&XmlUtil.Serializer(typeof(List&Student&),&list1);Console.Write(xml);
6. Xml转换到List
C# 代码 &&复制
List&Student&&list2&=&XmlUtil.Deserialize(typeof(List&Student&),&xml)&as&List&Student&;foreach&(Student&stu&in&list2){&&&&Console.WriteLine(stu.Name&+&","&+&stu.Age.ToString());}
1)">1)">1" ng-class="{current:{{currentPage==page}}}" ng-repeat="page in pages"><li class='page' ng-if="(endIndex<li class='page next' ng-if="(currentPage
相关文章阅读

我要回帖

更多关于 c xml 序列化 的文章

 

随机推荐