XML序列化反序列化 我用gdi+画图,画完想把每个图形的属性存起来,便于以后加载,修改。图形类是从ShapeBase类继承的,Shapes类中一个ArrayList来存放图形。怎样实现序列化?MSDN上说:XmlSerializer 无法序列化或反序列化以下数组ArrayList 的数组List 的数组,该如何处理? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 private string myXmlSerializer(object o) { XmlSerializer ser = new XmlSerializer(o.GetType()); System.IO.MemoryStream mem = new MemoryStream(); XmlTextWriter writer = new XmlTextWriter(mem, Encoding.Default); ser.Serialize(writer, o); writer.Close(); return Encoding.Default.GetString(mem.ToArray()); }反序列化的函数private object myXmlDeserialize(string s, Type t) { XmlSerializer mySerializer = new XmlSerializer(t); StreamReader mem2 = new StreamReader(new MemoryStream(System.Text.Encoding.Default.GetBytes(s)), System.Text.Encoding.Default); return mySerializer.Deserialize(mem2); } <?xml version="1.0" encoding="utf-8"?><Shapes xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><List xsi:type="Rect"><penWidth>1</penWidth><penColor /><X1>243</X1><Y>57</Y><X>126</X><Y1>115</Y1></List><List xsi:type="Ell"><penWidth>1</penWidth><penColor /><X1>354</X1><Y>52</Y><X>275</X><Y1>102</Y1></List><List xsi:type="Rect"><penWidth>1</penWidth><penColor /><X1>306</X1><Y>132</Y><X>220</X><Y1>172</Y1></List></Shapes> 这是序列化之后的XML文档,但是在反序列化的时候,得不到对象的类型,是怎么回事?是和我定义的ArrayList有关吗?我在反序列化之后是需要重绘的,如果不用ArrarList,又该如何处理? ArrayList中的自定义类需要自己实现序列化和反序列化。 你的自定义的类有Serializable没?如果你的自定义类里面的属性都是一些常规的定义,如string,int等,就可以直接在类加入Attribute,如: [Serializable] public class Accreditation {。如果里面含有一些无法进行序列化的属性定义,你需要继承IXmlSerializable接口,对无法进行序列化的属性进行自定义,如将二进制的内容(如Bitmap)进行自定义序列化为XML后,还需要对反序列化将XML中的内容转为二进制内容。 我用GDI+画的图需要能重新加载修改,如果保存成png就不能修改了。在精简框架下没有二进制序列化,所以想用xml序列化,可是怎么也做不了,自定义的类没有写[Serializable] ,总是提示缺少using,不知道该怎么处理?如果不用序列化,怎样才能加载之前绘过的图?(可以修改) 自定义序列化,实现IXmlSerializable接口,提醒下brush是不能序列化的。 命名空间是System.SerializableAttribute 实现IXmlSerializable接口的类必须具有无参数构造函数,我定义的类都有参数呀 关于WCF REST错误提示机制 WINFORM中webBrowser读取网页中的FLASH,然后点FLASH中的某个图片 江湖救急啊!! C# socket问题 关于get set用法 一个数据插入到.txt中是否重复的问题! 委托的一个问题 高手请进,如何获取gridview的结果总数,如何跳转到指定的页,在gridview中如何显示当前页是第几页! 关于C#下如何用程序将一个数据库导入到另外一个数据库 博客搬家的原理是什么? 期待~~~~~~ 怎么传类型的问题 C#与数据库的链接一些不明白的地方~
{
XmlSerializer ser = new XmlSerializer(o.GetType());
System.IO.MemoryStream mem = new MemoryStream();
XmlTextWriter writer = new XmlTextWriter(mem, Encoding.Default);
ser.Serialize(writer, o);
writer.Close();
return Encoding.Default.GetString(mem.ToArray());
}反序列化的函数
private object myXmlDeserialize(string s, Type t)
{
XmlSerializer mySerializer = new XmlSerializer(t);
StreamReader mem2 = new StreamReader(new MemoryStream(System.Text.Encoding.Default.GetBytes(s)), System.Text.Encoding.Default);
return mySerializer.Deserialize(mem2);
}
[Serializable]
public class Accreditation
{。如果里面含有一些无法进行序列化的属性定义,你需要继承IXmlSerializable接口,对无法进行序列化的属性进行自定义,如将二进制的内容(如Bitmap)进行自定义序列化为XML后,还需要对反序列化将XML中的内容转为二进制内容。
如果不用序列化,怎样才能加载之前绘过的图?(可以修改)
System.SerializableAttribute