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序列化的更多相关文章

  1. 实战经验分享之C#对象XML序列化

    .Net Framework提供了对应的System.Xml.Seriazliation.XmlSerializer负责把对象序列化到XML,和从XML中反序列化为对象.Serializer的使用比较 ...

  2. 将对象xml序列化和反序列化

    //将一个对象按XML序列化的方式写入到一个文件,使用的默认的UTF8编码格式 //o为要序列化的对象 //path保存文件的路径 public static object  _lockObj=new ...

  3. XmlSerializer 对象的Xml序列化和反序列化

    http://www.cnblogs.com/yukaizhao/archive/2011/07/22/xml-serialization.html 这篇随笔对应的.Net命名空间是System.Xm ...

  4. XmlSerializer 对象的Xml序列化和反序列化,XMLROOT别名设置

    这篇随笔对应的.Net命名空间是System.Xml.Serialization:文中的示例代码需要引用这个命名空间.   为什么要做序列化和反序列化? .Net程序执行时,对象都驻留在内存中:内存中 ...

  5. C# 使用XML序列化对象(二)

    在C# 使用XML序列化对象(一)中描述了使用XML序列化对象的最简单的实现. 现在我们来看看稍微复杂一点的情况: 现有两个类:A和B,B是A的派生类,如下所示: public class A { p ...

  6. C# 使用XML序列化对象(一)

    在System.Xml.Serialization命名空间中提供了XML序列化类XmlSerializer用于将对象序列化为XML. 下面看一个最简单的例子: public class A { pub ...

  7. c#xml序列化对象,xml标记都缩写了

    最近最后一个接口,他们的格式很严格必须是如下格式 <message> <age>20</age> <name>张三</name> </ ...

  8. C#操作Xml:XmlSerializer 对象的Xml序列化和反序列化

    这篇随笔对应的.Net命名空间是System.Xml.Serialization:文中的示例代码需要引用这个命名空间. 为什么要做序列化和反序列化? .Net程序执行时,对象都驻留在内存中:内存中的对 ...

  9. Android -- 创建XML文件对象及其序列化, pull解析XML文件

    1. 创建XML文件对象及其序列化 示例代码:(模拟以xml格式备份短信到SD卡) SmsInfo.java, bean对象 /** * 短信的业务bean * @author Administrat ...

随机推荐

  1. 汇编语言(学习笔记-----[bx]和loop)

    1.[bx]是什么??     和[0]有些类似,[0]表示内存单元,它的偏移地址是0      [bx]同样也表示一个内存单元,它的偏移地址在bx中,mov ax,[bx]  (字)   mov  ...

  2. php 建立类POST/GET 的HTTP请求

    1.第一种利用fsock的方式来建立类POST的请求. <?php $srv_ip = '192.168.1.5';//你的目标服务地址. $srv_port = 80;//端口 $url = ...

  3. Codeforces Round #277 (Div. 2) E. LIS of Sequence DP

    E. LIS of Sequence Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/486/pr ...

  4. Codeforces Gym 100203G G - Good elements 暴力

    G - Good elementsTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/ ...

  5. SDWebImage内存性能优化

    // 清除已过期图片 [[SDImageCache sharedImageCache] cleanDisk]; // 设置最多缓存7天时间 [[SDImageCache sharedImageCach ...

  6. MySQL Cluster基础知识简介以及基本参数介绍

    PS:这些资料都是以前整理的,有些有可能是在网上copy别人的,但是时间长了,记不得出处了,sorry! 在MySQL Cluster环境的配置文件config.ini里面,每一类节点都有两个(或以上 ...

  7. Linux用户及用户组设置

    查看当前用户所属的组 groups  查看<user1>, <user2> 和 <user3>所属的组 groups <user1> <user2 ...

  8. oracle 基本操作

    1. 开启oralce和监听#su - oracle$sqlplus / as sysdba>startup>exit$lsnrctl start$ps -ef|grep oracle 一 ...

  9. 几个容易出错的css盒子模型细节

    css是前端必须掌握的技能之一.其中的box模型,如图所示: 大体就是border.margin.padding和content,概念挺好理解.但当盒子模型与其他属性一块使用时产生的现象,或许您还难以 ...

  10. selenium python 第一个脚本

    为什么选择python?我的回答很简单,简单易学,功能强大! 下面看看python和selenium 2的结合是什么样子吧 一.第一个selenium python脚本: #coding = utf- ...