首页 / 软件开发 / Silverlight / 把WinForms开发的桌面应用移植到Silverlight开发的RIA(第1部分)
把WinForms开发的桌面应用移植到Silverlight开发的RIA(第1部分)2011-09-05 博客园 redmoon1,SerializableAttribute不存在在Silverlight中,已经不包含SerializableAttribute,不过没有了这个标记 也不会影响序列化。去除这个特性标记的原因,是因为已经了一系列XML为开头的 用于序列化的特性标记。对于这个变动,没有什么难点,主要是比较麻烦,需要逐一删除。当然如果不 想删除,最简单的方式就是,自己创建一个SerializableAttribute 。2,Dictionary的xml序列化,用XElement代替XmlDocument, Convert.ChangeType的参数变化说起来,就是不在Silverlight中,也没有办法用XmlSerializer对 Dictionary<>进行序列化。而我直接实现了一个能够Xml序列化的 Dictionary,代码如下:public class XmlSerDictionary<TKey, Tvalue> : Dictionary<TKey, Tvalue>, IXmlSerializable
{
#region IXmlSerializable Members
System.Xml.Schema.XmlSchema IXmlSerializable.GetSchema()
{
return null;
}
void IXmlSerializable.ReadXml(System.Xml.XmlReader reader)
{
XmlDocument doc = new XmlDocument();
doc.LoadXml(reader.ReadOuterXml());
foreach (XmlElement item in doc.ChildNodes [0].ChildNodes)
{
TKey key = (TKey)Convert.ChangeType (item.GetAttribute("key"), typeof(TKey));
Tvalue value = (Tvalue)Convert.ChangeType (item.InnerText, typeof(Tvalue));
this.Add(key, value);
}
}
void IXmlSerializable.WriteXml(System.Xml.XmlWriter writer)
{
foreach (var item in this)
{
writer.WriteStartElement("item");
writer.WriteAttributeString("key", item.Key.ToString());
writer.WriteValue(item.Value);
writer.WriteEndElement();
}
}
#endregion
}