C#对象XML序列化
1.Xml序列化操作类
.Net Framework提供了对应的System.Xml.Seriazliation.XmlSerializer负责把对象序列化到XML,和从XML中反序列化为对象。
以下代码仅供参考:
public class XmlSerializerTest
{
public static void SaveToXml(string file, object data)
{
XmlSerializer serializer = new XmlSerializer(data.GetType());
using (XmlTextWriter fs = new XmlTextWriter(file, Encoding.UTF8)) // 如果输出中文,记得字符集
{
fs.Formatting = System.Xml.Formatting.Indented; // 输出后保留换行符等。默认为None,即过滤换行符等
serializer.Serialize(fs, data);
}
}
public static object LoadFromXml(string file, Type type)
{
object value = null;
XmlSerializer serializer = new XmlSerializer(type);
using (XmlTextReader fs = new XmlTextReader(file))
{
value = serializer.Deserialize(fs);
}
return value;
}
}
2.对象与Xml的关系
2.1对象的默认设置
输出对象时,仅输出Public标识的属性,如下代码:(此处仅说明默认情况,下面会有介绍xml标记)
public class TestObject
{
public string ID { set; get; }
public string Name { set; get; }
public string Desc { set; get; }
public List<string> Tags { set; get; }
public List<ChildObject> Children { set; get; }
} public class ChildObject
{
public string ID { set; get; }
public string Name { set; get; }
public string Desc { set; get; }
}
输出后,文件内容是:
<?xml version="1.0" encoding="utf-8"?>
<TestObject xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<ID>1</ID>
<Name>测试对象</Name>
<Desc>此为描述
此处换行显示</Desc>
<Tags>
<string>标签A</string>
<string>标签B</string>
<string>标签C</string>
</Tags>
<Children>
<ChildObject>
<ID>1-1</ID>
<Name>子A</Name>
<Desc>此处
换行</Desc>
</ChildObject>
<ChildObject>
<ID>1-2</ID>
<Name>子B</Name>
<Desc>此处不换行</Desc>
</ChildObject>
</Children>
</TestObject>
2.2对象的序列化标记
[XmlRootAttribute("TestObject", Namespace = "Sy4w.Test", IsNullable = false)]
public class TestObject // 序列化此类时,定义为Xml根节点信息
[XmlAttribute("ID")]
public string ID { set; get; } // 作为TestObject标签的属性。如:<ClassID="..." />
[XmlElementAttribute("Desc", IsNullable = false)]
public string Desc { set; get; } // 作为类标签的内容。如<Class>...</Class>
[XmlElementAttribute("Tags", IsNullable = false)]
public List<string> Tags { set; get; } // 作为类标签的子节点。如<Class><Tags>...</Tags></Class>
[XmlArrayAttribute("Children")]
public List<ChildObject> Children { set; get; } // 作为类标签的多级子标签。如<Class><Children><ChildObject>...</ChildObject></Children></Class>
[XmlIgnoreAttribute]
public string Name { set; get; } // 此属性忽略
用代码感受下吧
[XmlRootAttribute("TestObject", Namespace = "Sy4w.Test", IsNullable = false)]
public class TestObject
{
[XmlAttribute("ID")]
public string ID { set; get; }
[XmlIgnoreAttribute]
public string Name { set; get; }
[XmlElementAttribute("Desc", IsNullable = false)]
public string Desc { set; get; }
[XmlElementAttribute("Tags", IsNullable = false)]
public List<string> Tags { set; get; }
[XmlArrayAttribute("Children")]
public List<ChildObject> Children { set; get; }
}
public class ChildObject
{
[XmlAttribute("ID")]
public string ID { set; get; }
[XmlIgnoreAttribute]
public string Name { set; get; }
[XmlElementAttribute("Desc", IsNullable = true)]
public string Desc { set; get; }
}
生成的Xml文件示例:
<?xml version="1.0" encoding="utf-8"?>
<TestObject xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" ID="1" xmlns="Sy4w.Test">
<Desc>此为描述
此处换行显示</Desc>
<Tags>标签A</Tags>
<Tags>标签B</Tags>
<Tags>标签C</Tags>
<Children>
<ChildObject ID="1-1">
<Desc>此处
换行</Desc>
</ChildObject>
<ChildObject ID="1-2">
<Desc>此处不换行</Desc>
</ChildObject>
</Children>
</TestObject>
C#对象XML序列化的更多相关文章
- 实战经验分享之C#对象XML序列化
.Net Framework提供了对应的System.Xml.Seriazliation.XmlSerializer负责把对象序列化到XML,和从XML中反序列化为对象.Serializer的使用比较 ...
- 将对象xml序列化和反序列化
//将一个对象按XML序列化的方式写入到一个文件,使用的默认的UTF8编码格式 //o为要序列化的对象 //path保存文件的路径 public static object _lockObj=new ...
- XmlSerializer 对象的Xml序列化和反序列化
http://www.cnblogs.com/yukaizhao/archive/2011/07/22/xml-serialization.html 这篇随笔对应的.Net命名空间是System.Xm ...
- XmlSerializer 对象的Xml序列化和反序列化,XMLROOT别名设置
这篇随笔对应的.Net命名空间是System.Xml.Serialization:文中的示例代码需要引用这个命名空间. 为什么要做序列化和反序列化? .Net程序执行时,对象都驻留在内存中:内存中 ...
- C# 使用XML序列化对象(二)
在C# 使用XML序列化对象(一)中描述了使用XML序列化对象的最简单的实现. 现在我们来看看稍微复杂一点的情况: 现有两个类:A和B,B是A的派生类,如下所示: public class A { p ...
- C# 使用XML序列化对象(一)
在System.Xml.Serialization命名空间中提供了XML序列化类XmlSerializer用于将对象序列化为XML. 下面看一个最简单的例子: public class A { pub ...
- c#xml序列化对象,xml标记都缩写了
最近最后一个接口,他们的格式很严格必须是如下格式 <message> <age>20</age> <name>张三</name> </ ...
- C#操作Xml:XmlSerializer 对象的Xml序列化和反序列化
这篇随笔对应的.Net命名空间是System.Xml.Serialization:文中的示例代码需要引用这个命名空间. 为什么要做序列化和反序列化? .Net程序执行时,对象都驻留在内存中:内存中的对 ...
- Android -- 创建XML文件对象及其序列化, pull解析XML文件
1. 创建XML文件对象及其序列化 示例代码:(模拟以xml格式备份短信到SD卡) SmsInfo.java, bean对象 /** * 短信的业务bean * @author Administrat ...
随机推荐
- UVa442 Matrix Chain Multiplication
// UVa442 Matrix Chain Multiplication // 题意:输入n个矩阵的维度和一些矩阵链乘表达式,输出乘法的次数.假定A和m*n的,B是n*p的,那么AB是m*p的,乘法 ...
- Android Studio安装及主题字体配置
在2013 Google I/O 大会上,谷歌推出了自家全新的安卓软件集成开发工具 Android Studio,这是 Google 基于 IntelliJ IDEA 改动而来. 谷歌称 Androi ...
- C#的WebBrowser操作frame如此简单
刚学c#不久,也不太懂什么IHTMLDocument.IHTMLDocument2.IWebBrowser2等等.自己琢磨了好久,终于知道了怎么用WebBrowser操作frame和iframe. 1 ...
- 从user 登陆開始
首先.我们来看看我们的需求,看看需求里有没有你感兴趣的知识点: 用户登陆: 实现用户从网页登陆界面输入正确的username.password及验证码后跳转到一个页面显示登陆成功 要求: 1. 数据 ...
- C++中的inline函数
内联函数: () 内联函数定义和作用: 将一个函数声明为inline,那么函数就成为内联函数.内联函数通常就是它在程序中每个调用点上“内联地”展开.从定义上看,内联函数跟一般函数不一样,一般函数调用的 ...
- UNIX基础知识之用户标识
一.用户ID 口令文件(/etc/passwd)登录项中的用户ID(user ID)是个数值,它向系统标识各个不同的用户.系统管理员在确定一个用户的登录名的同时,确定其用户ID.用户不能更改其用户ID ...
- 新浪云(SAE)使用没有内置的django版本
SAE自带的django目前到1.5版本,如果要使用更高的版本,则需要把django包同代码一起上传. 以1.7.3为例 先从SAE svn签出代码,默认1是根目录 1. 1目录下创建文件夹 sit ...
- Qt Quick实现的疯狂算数游戏
使用 Qt Quick 写了个小游戏:疯狂算数.支持 Windows 和 Android 两个平台. 游戏简单,但牵涉到下面你的 Qt Quick 主题: 自己实现一个按钮 自适应分辨率 国际化 QM ...
- python_基本语法
初试牛刀 假设你希望学习Python这门语言,却苦于找不到一个简短而全面的入门教程.那么本教程将花费十分钟的时间带你走入Python的大门.本文的内容介于教程(Toturial)和速查手册(Cheat ...
- vs2012调试时为什么会出现clr.dll与mscordacwks.dll版本不匹配
第一次开发wpf程序,就遇到了上述问题,最后发现是因为vs2012默认用的是.net4.5,将版本改为.net4就好了,问题解决