Dictionary(支持 XML 序列化),注意C#中原生的Dictionary类是无法进行Xml序列化的
/// <summary>
/// Dictionary(支持 XML 序列化)
/// </summary>
/// <typeparam name="TKey">键类型</typeparam>
/// <typeparam name="TValue">值类型</typeparam>
[XmlRoot("XmlDictionary")]
[Serializable]
public class XmlDictionary<TKey, TValue> : Dictionary<TKey, TValue>, IXmlSerializable
{
#region 构造函数
public XmlDictionary()
{ } public XmlDictionary(IDictionary<TKey, TValue> dictionary) : base(dictionary)
{ } public XmlDictionary(IEqualityComparer<TKey> comparer) : base(comparer)
{ } public XmlDictionary(int capacity) : base(capacity)
{ } public XmlDictionary(int capacity, IEqualityComparer<TKey> comparer) : base(capacity, comparer)
{ } protected XmlDictionary(SerializationInfo info, StreamingContext context) : base(info, context)
{ }
#endregion 构造函数 #region IXmlSerializable Members
public XmlSchema GetSchema() => null; /// <summary>
/// 从对象的 XML 表示形式生成该对象(反序列化)
/// </summary>
/// <param name="xr"></param>
public void ReadXml(XmlReader xr)
{
if (xr.IsEmptyElement)
return;
var ks = new XmlSerializer(typeof(TKey));
var vs = new XmlSerializer(typeof(TValue));
xr.Read();
while (xr.NodeType != XmlNodeType.EndElement)
{
xr.ReadStartElement("Item");
xr.ReadStartElement("Key");
var key = (TKey)ks.Deserialize(xr);
xr.ReadEndElement();
xr.ReadStartElement("Value");
var value = (TValue)vs.Deserialize(xr);
xr.ReadEndElement();
Add(key, value);
xr.ReadEndElement();
xr.MoveToContent();
}
xr.ReadEndElement();
} /// <summary>
/// 将对象转换为其 XML 表示形式(序列化)
/// </summary>
/// <param name="xw"></param>
public void WriteXml(XmlWriter xw)
{
var ks = new XmlSerializer(typeof(TKey));
var vs = new XmlSerializer(typeof(TValue));
foreach (var key in Keys)
{
xw.WriteStartElement("Item");
xw.WriteStartElement("Key");
ks.Serialize(xw, key);
xw.WriteEndElement();
xw.WriteStartElement("Value");
vs.Serialize(xw, this[key]);
xw.WriteEndElement();
xw.WriteEndElement();
}
}
#endregion IXmlSerializable Members
}
Dictionary(支持 XML 序列化),注意C#中原生的Dictionary类是无法进行Xml序列化的的更多相关文章
- Image(支持 XML 序列化),注意C#中原生的Image类是无法进行Xml序列化的
		
/// <summary> /// Image(支持 XML 序列化) /// </summary> [XmlRoot("XmlImage")] publi ...
 - 利用JavaScriptSerializer类 进行Json对象的序列化和反序列化和过滤
		
项目下载:JavaScriptSerializer_对JSON对象序列化与反序列化及过滤器 利用<JavascriptSerializer类> 进行Json对象的序列化和反序列化 1. 首 ...
 - .net的XML对象序列化VS WCF中xml序列化问题
		
整理一下 .net 对象序列化注意事项: 1. 字段:必须是 public类型 2.属性:只读或者只写的属性不被序列化,只有 可读可写并且赋值的才可以 序列化: Someclass obj = new ...
 - 问题:不支持Dictionary;结果:在Web Service中傳送Dictionary
		
在Web Service中傳送Dictionary 有個需求,想在Web Service中傳遞Dictionary<string, string>參數,例如: 排版顯示純文字 [WebMe ...
 - 根据JavaScript中原生的XMLHttpRequest实现jQuery的Ajax
		
基本介绍 XmlHttpRequest XmlHttpRequest是JavaScript中原生的,历史悠久的一种发送网络请求的方案. 基本上所有前端框架对于网络请求的部分都是基于它来完成的. 在本章 ...
 - Spring 中的事务操作、注解、以及 XML 配置
		
事务 事务全称叫数据库事务,是数据库并发控制时的基本单位,它是一个操作集合,这些操作要么不执行,要么都执行,不可分割.例如我们的转账这个业务,就需要进行数据库事务的处理. 转账中至少会涉及到两条 SQ ...
 - 【翻译自nikic大神】PHP中原生类型的方法
		
引言 第一次,翻译别人的文章,用四级英语的水平来翻译~~囧,可能有很多不太恰当的地方,尽管拍砖(有些地方实在想不到恰当的翻译,我同时贴出了原文和自己很low的翻译). 翻译这篇文章用了我3个晚上一个中 ...
 - 序列化在Netty中的使用
		
Java序列化的缺点 1.无法跨语言 对于Java序列化后的字节数组,别的语言无法进行反序列化 2.序列化后的码流过大 3.序列化性能低 使用JDK自带的序列化进行对象的传输 被传输的,实现了序列化接 ...
 - 在Web Service中傳送Dictionary
		
有個需求,想在Web Service中傳遞Dictionary<string, string>參數,例如: 排版顯示純文字 [WebMethod] public Dictionary< ...
 
随机推荐
- Logstash-安装logstash-filter-multiline插件(解决logstash匹配多行日志)
			
ELK-logstash在搬运日志的时候会出现多行日志,普通的搬运会造成保存到ES中日志一条一条的保存,很丑,而且不方便读取,logstash-filter-multiline可以解决该问题. 接下来 ...
 - Hibernate中注解的开发
			
转自:https://blog.csdn.net/liujiahan629629/article/details/22335563 在利用注解开发数据库持久层以前,需要学习一个规范JPA(JavaPe ...
 - js中的"=="和equals()以及is()三者的区别
			
在 javaScript或者jQuery中字符串比较没有equals()方法,要比较两个字符串是否相等可以直接用==或者is()进行判断. 例如: "a"=="a&quo ...
 - 转载TCP-IP协议解释
			
本文转载自 http://www.ruanyifeng.com/blog/2009/03/tcp-ip_model.html TCP/IP模型是互联网的基础, 理解 TCP/IP对理解互联网至关重要 ...
 - Ext.net Calendar 控件在有模板页的时候,模板页定义了TD的样式造成日历控件的样式丢掉
			
Ext.net Calendar 控件在有模板页的时候,模板页定义了TD的样式造成日历控件的样式丢掉 解决方案 在本页面添加下面的样式 <style type="text/css&qu ...
 - 51Nod - 1640 天气晴朗的魔法 大+小生成树(最大值最小)/二分
			
天气晴朗的魔法 这样阴沉的天气持续下去,我们不免担心起他的健康. 51nod魔法学校近日开展了主题为“天气晴朗”的魔法交流活动. N名魔法师按阵法站好,之后选取N - 1条魔法链将所有魔法师的 ...
 - 由一次动态改变font-size的大小引申的一系列困惑补录
			
以下结论如有错误,欢迎指正 在切入正题之前,先了解下window 和document这两个大对象 我们熟知 JavaScript的组成如下图所示: window对象和document对象分别属于哪个分 ...
 - LOL数值分析
			
http://blog.sina.com.cn/s/blog_704133cb01018hud.html 为了从理论层面提高自己打<英雄联盟>的水平,再加上自己也有这方面的兴趣,所以我最近 ...
 - Unity ShadowMapping
			
原理: 场景中一个plane,一个cube,一个light,一个mainCamera 为了在plane上呈现cube的shadow,先在light上放一个lightCamera(位置方向跟light相 ...
 - shell编程  条件判断式----利用 if .... then ----多重
			
条件判断式----利用 if .... then ----多重 在同一个数据的判断中,如果该数据需要进行多种不同的判断时,应该怎么作?举例来说,上面的 sh06.sh 脚本中,我们只要进行一次 $yn ...