C#中字典的xml文档序列化的一个实现
来源:互联网 发布:高分数据正射校正 编辑:程序博客网 时间:2024/05/17 00:53
using System.Collections;using System.Xml;using System.Xml.Serialization;using System.IO;using System;using System.Runtime.Serialization;using System.Runtime.Serialization.Formatters.Binary;using System.Collections.Generic;using System.Text;using System.Xml.Schema;namespace SerializableDictionary{public class Test{public static String UTF8ByteArrayToString(byte[] characters) { UTF8Encoding encoding = new UTF8Encoding(); String constructedString = encoding.GetString(characters); return (constructedString); } public static byte[] StringToUTF8ByteArray(String pXmlString) { UTF8Encoding encoding = new UTF8Encoding(); byte[] byteArray = encoding.GetBytes(pXmlString); return byteArray; } public static String SerializeObject<T>(object pObject) { String XmlizedString = ""; MemoryStream memoryStream = new MemoryStream(); XmlSerializer xs = new XmlSerializer(typeof(T)); XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8); xs.Serialize(xmlTextWriter, pObject); memoryStream = (MemoryStream)xmlTextWriter.BaseStream; // (MemoryStream) XmlizedString = UTF8ByteArrayToString(memoryStream.ToArray()); return XmlizedString; } public static object DeserializeObject<T>(String pXmlizedString) { XmlSerializer xs = new XmlSerializer(typeof(T)); MemoryStream memoryStream = new MemoryStream(StringToUTF8ByteArray(pXmlizedString)); XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8); return xs.Deserialize(memoryStream); } static void Main() { SerializableDictionary<int, int> dict = new SerializableDictionary<int, int>(); dict.Add(1, 1); dict.Add(2, 2); string str = SerializeObject<dict>(dict); StreamWriter stream = new StreamWriter("test.xml"); stream.Write(str); stream.Close(); }} [XmlRoot("dictionary"), Serializable] public class SerializableDictionary<TKey, TValue> : Dictionary<TKey, TValue>, IXmlSerializable { public SerializableDictionary() { } public SerializableDictionary(IDictionary<TKey, TValue> dictionary) : base(dictionary) { } public SerializableDictionary(IEqualityComparer<TKey> comparer) : base(comparer) { } public SerializableDictionary(int capacity) : base(capacity) { } public SerializableDictionary(int capacity, IEqualityComparer<TKey> comparer) : base(capacity, comparer) { } protected SerializableDictionary(SerializationInfo info, StreamingContext context) : base(info, context) { } #region IXmlSerializable Members public XmlSchema GetSchema() { return null; } /// <summary> /// 从对象的 XML 表示形式生成该对象 /// </summary> /// <param name="reader"></param> public void ReadXml(XmlReader reader) { var keySerializer = new XmlSerializer(typeof(TKey)); var valueSerializer = new XmlSerializer(typeof(TValue)); bool wasEmpty = reader.IsEmptyElement; reader.Read(); if (wasEmpty) return; while (reader.NodeType != XmlNodeType.EndElement) { reader.ReadStartElement("item"); reader.ReadStartElement("key"); var key = (TKey)keySerializer.Deserialize(reader); reader.ReadEndElement(); reader.ReadStartElement("value"); var value = (TValue)valueSerializer.Deserialize(reader); reader.ReadEndElement(); Add(key, value); reader.ReadEndElement(); reader.MoveToContent(); } reader.ReadEndElement(); } /// <summary> /// 将对象转换为其 XML 表示形式 /// </summary> /// <param name="writer"></param> public void WriteXml(XmlWriter writer) { var keySerializer = new XmlSerializer(typeof(TKey)); var valueSerializer = new XmlSerializer(typeof(TValue)); foreach (TKey key in Keys) { writer.WriteStartElement("item"); writer.WriteStartElement("key"); keySerializer.Serialize(writer, key); writer.WriteEndElement(); writer.WriteStartElement("value"); TValue value = this[key]; valueSerializer.Serialize(writer, value); writer.WriteEndElement(); writer.WriteEndElement(); } } #endregion }}
0 0
- C#中字典的xml文档序列化的一个实现
- C#中处理XML文档的方法
- C#中处理XML文档的方法
- C#中处理XML文档的方法
- C#中处理XML文档的方法
- C#中处理XML文档的方法
- C#中处理XML文档的方法
- C#中处理XML文档的方法
- C#中处理XML文档的方法
- C#中处理XML文档的方法
- C#中处理XML文档的方法
- C#中Xml文档的运用
- C# 中XML的序列化和反序列化
- C# 中关于 List 的 Xml序列化
- C# 中字体和颜色的XML序列化
- c# 中如何获取xml文档中最后的一个节点的值
- 如何在一个XML中插入序列化的类
- 一个可序列化的C#对象,如何转成一个XML格式的文件或字符串
- 快速排序(java实现)
- nyoj 524 A-B Problem 【Java大数】
- openGL学习之三角形等分
- Android项目中的对话框
- UVa 1329 Corporative Network
- C#中字典的xml文档序列化的一个实现
- MFC计算器 用vector实现和计算逆波兰表达式
- ios-使用委托模式(代理模式)
- 【English】Android -> Training -> Building Your First App -> Starting Another Activity
- 如何安装latex?
- 1.Boost之array
- Mac上android开发环境的搭建
- uva1586----Molar mass
- Java编程思想(八) —— 持有对象(上)