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 ...
随机推荐
- 美国VPS推荐1GB 50GB可以win
今天向大家推荐一款vps,1GB内存 50G硬盘 8M带宽 不限制流量,并且可以安装windows,年付才290元. 购买链接:http://www.jinbaoidc.com/page.aspx?c ...
- cdoj 1246 每周一题 拆拆拆~ 分解质因数
拆拆拆~ Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/problem/show/1246 Descri ...
- Codeforces Testing Round #12 A. Divisibility 水题
A. Divisibility Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/597/probl ...
- seajs 2.3.0 加入jquery
[前言] 上篇文章简单的介绍了seajs的使用,下午使用seajs整合jquery就碰到问题了. 下载seajs上的examples,里面直接require('jquery')没有不论什么问题, 我照 ...
- [Angular 2] Import custom module
The application structure: in app.module.ts: import { NgModule} from "@angular/core"; impo ...
- MHA手动切换 原创2 (主参与复制)
monitor 执行下面命令后, --orig_master_is_new_slave :原主变为新从,即server1变成了slave1的从.slave2跟据app1.conf中配制也变成了slav ...
- Javascript-获取URL请求参数
function getUrlParam(){ var param = [], hash; var url = window.location.href;//获取网页的url va ...
- Android:TabHost实现Tab切换
TabHost是整个Tab的容器,包含TabWidget和FrameLayout两个部分,TabWidget是每个Tab的表情,FrameLayout是Tab内容. 实现方式有两种: 1.继承TabA ...
- javaweb学习总结五(内省、beanUtils工具包)
一:内省的概念 1:内省是反射的一种特例,由于在反射中频繁的操作javabean,所以为了方便反射 javabean,sun公司开发出一套API提高效率. 2:javaBean,就是用来封装客户端请求 ...
- poj 3159 差分约束
思路:班长的糖果要比snoopy的多.并且要用手写堆栈,且堆栈的大小要开到20000000. #include<iostream> #include<cstdio> #incl ...