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< ...
随机推荐
- 《精通Spring4.X企业应用开发实战》读后感第一章
Rod Johnson在2002年,编写了interface21框架,spring就是基于此.Spring于2004年3月24日发布了1.0 Spring遵循的理念“”好的设计优于具体实现,代码应易于 ...
- maven导入jar包失败
找到原来的jar包位置,删除,然后重新导入,还是未成功.采取了网上的各种办法,还是不行.最简单的办法就是,重装下eclipse,以及maven配置.
- 无监督学习:Deep Generative Mode(深度生成模型)
一 前言 1.1 Creation 据说在费曼死后,人们在他生前的黑板上拍到如图画片,在左上角有道:What i cannot create ,I do not understand. Generat ...
- python读写xlsx
1使用openpyxl库读写excel xlrd和xlwt处理的是xls文件,单个sheet最大行数是65535,如果有更大需要的,建议使用openpyxl函数,最大行数达到1048576. 如果数 ...
- pytest框架(二)
一.示例代码一 D:YOYO\ __init__.py test_class.py # content of test_class.py class TestClass: def test_one(s ...
- 解决webSocke客户端连接服务端返回400错误
原因: nginx使用了转发,头信息没设置全,问题出现在nginx的配置文件 解决办法: 修改nginx.conf配置文件,在linux终端敲入vim /etc/nginx/nginx.conf,找到 ...
- 深入理解JVM的类加载
前言: 前面又说到Java程序实际上是将.class文件放入JVM中运行.虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验,转换,解析和初始化,最终形成可以被虚拟机直接使用的Java类 ...
- 洛谷 P2895 [USACO08FEB]流星雨Meteor Shower 解题报告
一起来看流星雨吧(话说我还没看到过流星雨呢) 题目 Problem 小A则听说另一个骇人听闻的消息: 一场流星雨即将袭击整个霸中,由于流星体积过大,它们无法在撞击到地面前燃烧殆尽,届时将会对它撞到的一 ...
- Python集合的常用操作
字典常用的就是,他的去重. set集合是python的一个基本数据类型. set中的元素是不重复的.⽆无序的.⾥面的元素必须是可hash的(int, str, tuple,bool). 我们可以这样来 ...
- Java泛型-通配符的上限和下限问题
Java的泛型中,通配符可以设置上限和下限. 上限:<? extends T> ?是T和T的子类 下限:<? super T> ?是T和T的父类 怎么看待这个上限和下限呢 首先 ...