XML序列化 System.Xml.Serialization
一、定义元数据
XML序列化常用属性:XMLRoot,XMlType、XMLText、XMLEnum等
[Serializable]
[XmlRoot]
public class Product
{
public int ProductID { set; get; }//默认为[XmlElement("ProductID")]
[XmlAttribute("Discount")]
public int DisCount { set; get; }
}
public class BookProduct : Product
{
public BookProduct() { }
public string ISBN { get; set; }
}
[XmlRoot("inv")]
public class Inventory
{
public Inventory() { }
[XmlArray("allpro")]
[XmlArrayItem("prod", typeof(Product)),
XmlArrayItem("book", typeof(BookProduct))]
public Product[] InventroyItems { set; get; }
}
二、简单序列化与反序列化
Product product = , DisCount = };
string s = "";
using (StringWriter sw = new StringWriter())
{
XmlSerializer xz = new XmlSerializer(typeof(Product));
xz.Serialize(sw, product);
s = sw.ToString();
}
Console.WriteLine(s);
Product info = SimpleSerializer.Deserialize(typeof(Product), s) as Product;
using (StringReader sr = new StringReader(s))
{
XmlSerializer xz = new XmlSerializer(typeof(Product));
info = xz.Deserialize(sr) as Product;
}
Console.WriteLine(info.ProductID.ToString() + ", " + info.DisCount);
三、集合的序列化与反序列化
List<Product> list = new List<Product>(){
, DisCount = },
, DisCount =, ISBN="aaaa"}
};
Inventory invertoy = new Inventory { InventroyItems = list.ToArray() };
string s = "";
using (StringWriter sw = new StringWriter())
{
XmlSerializer xz = new XmlSerializer(typeof(Inventory));
xz.Serialize(sw, invertoy);
s = sw.ToString();
}
Console.WriteLine(s);
using (StringReader sr = new StringReader(s))
{
XmlSerializer xz = new XmlSerializer(typeof(Inventory));
invertoy = xz.Deserialize(sr) as Inventory;
}
Console.WriteLine(invertoy.InventroyItems[].ProductID.ToString() + ].DisCount);
Console.ReadKey();
四、在不能更改数据的情况下,可以用代码重载XmlAttributeOverrides
string s = "";
using (StringWriter sw = new StringWriter())
{
XmlAttributes attrs = new XmlAttributes();
attrs.XmlElements.Add(new XmlElementAttribute("product1", typeof(Product)));
attrs.XmlElements.Add(new XmlElementAttribute("book1", typeof(BookProduct)));
XmlAttributeOverrides attrOverrides = new XmlAttributeOverrides();
attrOverrides.Add(typeof(Inventory), "InventroyItems", attrs);
XmlSerializer xz = new XmlSerializer(typeof(Inventory), attrOverrides);
xz.Serialize(sw, invertoy);
s = sw.ToString();
}
Console.WriteLine(s);
using (StringReader sr = new StringReader(s))
{
XmlAttributes attrs = new XmlAttributes();
attrs.XmlElements.Add(new XmlElementAttribute("product1", typeof(Product)));
attrs.XmlElements.Add(new XmlElementAttribute("book1", typeof(BookProduct)));
XmlAttributeOverrides attrOverrides = new XmlAttributeOverrides();
attrOverrides.Add(typeof(Inventory), "InventroyItems", attrs);
XmlSerializer xz = new XmlSerializer(typeof(Inventory), attrOverrides);
invertoy = xz.Deserialize(sr) as Inventory;
}
Console.WriteLine(invertoy.InventroyItems[].ProductID.ToString() + ].DisCount);
五、通用类
public class SimpleSerializer
{
/// <summary>
/// 序列化对象
/// </summary>
/// <typeparam name="T">对象类型</typeparam>
/// <param name="t">对象</param>
/// <returns></returns>
public static string Serialize<T>(T t)
{
using (StringWriter sw = new StringWriter())
{
XmlSerializer xz = new XmlSerializer(t.GetType());
xz.Serialize(sw, t);
return sw.ToString();
}
}
/// <summary>
/// 反序列化为对象
/// </summary>
/// <param name="type">对象类型</param>
/// <param name="s">对象序列化后的Xml字符串</param>
/// <returns></returns>
public static object Deserialize(Type type, string s)
{
using (StringReader sr = new StringReader(s))
{
XmlSerializer xz = new XmlSerializer(type);
return xz.Deserialize(sr);
}
}
}
XML序列化 System.Xml.Serialization的更多相关文章
- Unity使用Mono.Xml代替System.Xml 测试
测试环境 操作系统:Windows8.1 开发工具:Unity5.5.2 1.新建一个测试项目,观测引用System.Xml与Mono.Xml解析文件正确性,与打包后APK体积大小. 2.Mono.X ...
- 基础命名空间:序列化 System.Runtime.Serialization
对象通常都有状态(state),从一个对象中抽取这种状态,不论是将它存储于某地,还是通过网络传送,这种抽取动作称为“将一个对象序列化”,而反向处理过程,从一个被序列化的状态重建一个对象即为反序列化. ...
- 基础命名空间:序列化_自定义序列化 System.Runtime.Serialization
( (From Msdn) 自定义序列化是控制类型的序列化和反序列化的过程,通过控制序列化,可以确保序列化兼容性.换而言之,在不中断类型核心功能的情况下,可在类型的不同版本之间序列化和反序列化. 重 ...
- 【转】C# XML序列化去掉XML默认的命名空间及声明头
http://blog.csdn.net/aoshilang2249/article/details/44860155 重点: XmlSerializerNamespaces namespaces = ...
- [.net 面向对象程序设计进阶] (11) 序列化(Serialization)(三) 通过接口 IXmlSerializable 实现XML序列化 及 通用XML类
[.net 面向对象程序设计进阶] (11) 序列化(Serialization)(三) 通过接口 IXmlSerializable 实现XML序列化 及 通用XML类 本节导读:本节主要介绍通过序列 ...
- XML序列化和反序列化
上篇总结了下JSON的序列化和反序列化,博园中大牛给了很多牛叉的评论,学习了不少. 不过在上篇中忘了把json序列化和反序列化的另外一种方式写上去了,这里做个简单的补充: Json篇:http://w ...
- 【转】Xml序列化
XML序列化是将对象的公共属性和字段转换为XML格式,以便存储或传输的过程.反序列化则是从XML输出中重新创建原始状态的对象.XML序列化中最主要的类是XmlSerializer类.它的最重要的方法是 ...
- .net学习笔记---xml序列化
XML序列化是将对象的公共属性和字段转换为XML格式,以便存储或传输的过程.反序列化则是从XML输出中重新创建原始状态的对象.XML序列化中最主要的类是XmlSerializer类.它的最重要的方法是 ...
- .NET(C#):XML序列化时派生类的处理
原文 www.cnblogs.com/mgen/archive/2011/12/03/2275014.html 目录 1. 针对基类的XmlSerializer序列化派生类 2. 类内成员是派生类的序 ...
随机推荐
- linux系统挂载U盘,中文文件名乱码解决方案
本人(壮壮熊)所用系统:ubuntu 12.4 今天在使用mount指令挂在硬盘时,出现令人头疼的中文文件名乱码. 问题: 使用mount /dev/sdb1 /media指令挂在第二颗硬盘的第一个分 ...
- CSS3 Media Queries_media queries, css3属性详解
Media Queries直译过来就是"媒体查询",在我们平时的Web页面中head部分常看到这样的一段代码: <link href="css/reset.css& ...
- Knockout.js hasFocus
<head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8&quo ...
- MongoDB 从入门到精通
1,安装并启动数据库 从官网(www.mongodb.org/downloads)下载一个适合你平台的版本,我的系统是win7 64位的,下载文件也就10几M,将下载的文件解压放到任何目录 ...
- JS实现最短路径之迪杰斯特拉(Dijkstra)算法
最短路径: 对于网图来说,最短路径是指两个顶点之间经过的边上权值和最少的路径,我们称第一个顶点是源点,最后一个顶点是终点 迪杰斯特拉 ( Dijkstra) 算法是并不是一下子就求出 了 Vo 到V8 ...
- [javaSE] GUI(菜单)
菜单MenuBar Menu MenuItem 调用Frame对象的setMenuBar()方法,设置菜单,参数:MenuBar对象 import java.awt.FlowLayout; impo ...
- 一、window下zookeeper独立部署
zookeeper是一个分布式协调应用,用于管理大型主机.通俗地说,分布式应用相对于单体应用存在着很多要处理的问题,而这些问题通常是不太好处理的.比如,典型的一致性问题,而zookeeper可以很简单 ...
- (二)Apache服务器的下载与安装
PHP的运行必然少不了服务器的支持,何为服务器?通俗讲就是在一台计算机上,安装个服务器软件,这台计算机便可以称之为服务器,服务器软件和计算机本身的操作系统是两码事,计算机自身的操作系统可以为linux ...
- 深入辨析jvm内存区域
Java内存区域 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域: 程序计数器.虚拟机栈.本地方法栈.Java堆.方法区(运行时常量池).直接内存 程序计数器 当 ...
- spring data jpa(一)
第1章 Spring Data JPA的快速入门 1.1 需求说明 Spring Data JPA完成客户的基本CRUD操作 1.2 搭建Spring Data JPA的开发环境 1. ...