using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Xml;
using System.Xml.Schema;
using System.Xml.Serialization;
namespace SerialDict
{
[Serializable]
public class SerialDictionary<TKey, TValue> : Dictionary<TKey, TValue>, IXmlSerializable
{
private string name;
public SerialDictionary()
{
this.name = "SerialDictionary";
}
public SerialDictionary(string name)
{
this.name = name;
}
public void WriteXml(XmlWriter write) // Serializer
{
XmlSerializer KeySerializer = new XmlSerializer(typeof(TKey));
XmlSerializer ValueSerializer = new XmlSerializer(typeof(TValue)); write.WriteAttributeString("name", name); write.WriteStartElement(name);
foreach (KeyValuePair<TKey, TValue> kv in this)
{
write.WriteStartElement("element");
write.WriteStartElement("key");
KeySerializer.Serialize(write, kv.Key);
write.WriteEndElement();
write.WriteStartElement("value");
ValueSerializer.Serialize(write, kv.Value);
write.WriteEndElement();
write.WriteEndElement();
}
write.WriteEndElement();
}
public void ReadXml(XmlReader reader) // Deserializer
{
reader.Read();
XmlSerializer KeySerializer = new XmlSerializer(typeof(TKey));
XmlSerializer ValueSerializer = new XmlSerializer(typeof(TValue)); name = reader.Name;
reader.ReadStartElement(name);
while (reader.NodeType != XmlNodeType.EndElement)
{
reader.ReadStartElement("element");
reader.ReadStartElement("key");
TKey tk = (TKey)KeySerializer.Deserialize(reader);
reader.ReadEndElement();
reader.ReadStartElement("value");
TValue vl = (TValue)ValueSerializer.Deserialize(reader);
reader.ReadEndElement();
reader.ReadEndElement(); this.Add(tk, vl);
reader.MoveToContent();
}
reader.ReadEndElement();
reader.ReadEndElement(); }
public XmlSchema GetSchema()
{
return null;
}
}
class Program
{
static void Main(string[] args)
{
SerialDictionary<string, uint> sd = new SerialDictionary<string, uint>("modelNextIDs");
sd.Add("xxxx", );
sd.Add("xxxxx", );
sd.Add("xxxxxx", );
string fileName = "D:\\s.xml";
using (FileStream fileStream = new FileStream(fileName, FileMode.Create))
{
XmlSerializer xmlFormatter = new XmlSerializer(sd.GetType());
xmlFormatter.Serialize(fileStream, sd);
} SerialDictionary<string, uint> sd2 = new SerialDictionary<string, uint>("modelNextIDs");
using (FileStream fileStream2 = new FileStream(fileName, FileMode.Open))
{
XmlSerializer xmlFormatter = new XmlSerializer(sd2.GetType());
sd2 = xmlFormatter.Deserialize(fileStream2) as SerialDictionary<string, uint>;
}
}
}
}

C# Dictionary的xml序列化的更多相关文章

  1. Dictionary(支持 XML 序列化),注意C#中原生的Dictionary类是无法进行Xml序列化的

    /// <summary> /// Dictionary(支持 XML 序列化) /// </summary> /// <typeparam name="TKe ...

  2. 支持 XML 序列化的 Dictionary

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.X ...

  3. .NET中XML序列化的总结

    [题外话] 以前虽然常用.NET中的序列化,但是常用的BinaryFormatter,也就是二进制文件的序列化,却鲜用XML的序列化.对于XML序列化,.NET中同样提供了一个非常方便的工具XmlSe ...

  4. c# XML序列化与反序列化

    c# XML序列化与反序列化 原先一直用BinaryFormatter来序列化挺好,可是最近发现在WinCE下是没有办法进行BinaryFormatter操作,很不爽,只能改成了BinaryWrite ...

  5. Windows phone 之XML序列化与反序列化

    为什么要做序列化和反序列化? 一个回答: 我们都知道对象是不能在网络中直接传输的,不过还有补救的办法.XML(Extensible Markup Language)可扩展标记语言,本身就被设计用来存储 ...

  6. 【C#】【对象转XML】xml序列化

    笔记:xml序列化 /// <summary>        /// xml序列化        /// </summary>        /// <param nam ...

  7. XML序列化 判断是否是手机 字符操作普通帮助类 验证数据帮助类 IO帮助类 c# Lambda操作类封装 C# -- 使用反射(Reflect)获取dll文件中的类型并调用方法 C# -- 文件的压缩与解压(GZipStream)

    XML序列化   #region 序列化 /// <summary> /// XML序列化 /// </summary> /// <param name="ob ...

  8. 继承自DynamicObject的对象的Xml序列化

    默认情况下,对继承自DynamicObject的对象进行序列化操作是不会报错的,但是并没有实际序列化出任何东西来 为了让它进行序列化,我们改造一下实现类,实现IXmlSerializable接口 代码 ...

  9. C# Json库 和 xml 序列化反序列化 存在的问题

    json 正常情况下不会对私有成员进行序列化和反序列化, 因此在用json做深拷贝时, 就会丢失数据. 解决办法:       声明成公有成员. json在序列化和反序列化时, 如果类中有IComma ...

随机推荐

  1. android - android Couldn't load runtimecore_java from loader

    在写Arcgis Android 或百度Android的时候,有时会报诸如,java.lang.UnsatisfiedLinkError:android Couldn't load runtimeco ...

  2. 无法绑定到新的显示成员,参数名:newDisplayMember

    此问题不是网上说的 DisplayMember 等先后顺序问题,即使更换绑定数序,只是把错误覆盖而已(绑定的是对象的类名) ValueMember = "Id"; DisplayM ...

  3. Oracle学习【索引及触发器】

    索引B_Tree结构 请参照 响应图例 索引是一种允许直接访问数据表中某一数据行的树形结构,为了提高查询效率而引入,是独立于表的对象,可以存放在与表不同的表空间中.索引记录中存有索引关键字和指向表中数 ...

  4. $(obj).data() 绑定和获取数据的应用

    1.解说 data() 方法向被选元素附加数据,或者从被选元素获取数据. 例如:$("#id").data("name","xiao"); ...

  5. 如何把visual studio 2010的工程文件迁入TFS2010中管理

    如何在VS2010里面创建项目并添加到TFS2010里面. 新建一个项目,并把它添加到TFS,我们会收到下面的错误: 这是因为我们没有为项目创建Team project,而把它直接添加到了Team p ...

  6. 三步走起 提升 iOS 审核通过率 下篇

    根据2015年的数据统计情况,并结合<苹果应用商店审核指南>,互娱 iOS 预审组通过细分将预审工作划为3大模块:客户端资源检查.应用内容检查和提审资源检查. 在上一篇文章中,Bugly ...

  7. SQL数据库的备份和恢复

    SQL数据库的备份和恢复 一.SQL数据库的备份: 1.依次打开 开始菜单 → 程序 → Microsoft SQL Server 2008 → SQL Server Management Studi ...

  8. CSS Padding(填充)

    CSS Padding(填充)属性定义元素边框与元素内容之间的空间. Padding(填充) 当元素的 Padding(填充)(内边距)被清除时,所"释放"的区域将会受到元素背景颜 ...

  9. 理解Javascript__undefined和null

    在 ECMAScript 的原始类型中,是有Undefined 和 Null 类型的. 这两种类型都分别对应了属于自己的唯一专用值,即undefined 和 null. alert(undefined ...

  10. OpenCV Tricks[OpenCV 笔记3]

    官方例程 事例程序位于opencv-3.1.0/samples/cpp/ 目录下,可以通过编译整个工程,编译所有的Sample Code 显示当前使用的OpenCV版本 CV_VERSION为标识当前 ...