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. my-view-isnt-reflecting-changes-ive-made-to-the-underlying-tables

    FROM http://sqlstudies.com/2013/01/20/my-view-isnt-reflecting-changes-ive-made-to-the-underlying-tab ...

  2. hibernate一些坑记录集

    1:对比原生sql查询和 hql查询 返回结果的类型 count: sql: select count(0) from xxx where .... 返回 BigInteger hql: select ...

  3. php7.0 redis扩展下载地址

    http://windows.php.net/downloads/pecl/snaps/redis/20160319/

  4. MyBatis之四:调用存储过程含分页、输入输出参数

    在前面分别讲解了通过mybatis执行简单的增删改,多表联合查询,那么自然不能缺少存储过程调用,而且还带分页功能. 注意:表结构参见上篇讲解联合查询的表. 一.查询某班级以及该班级下面所有学生的记录 ...

  5. Python2.7.3移除字符串中重复字符(一)

    移除重复字符很简单,这里是最笨,也是最简单的一种.问题关键是理解排序的意义: # coding=utf-8 #learning at jeapedu in 2013/10/26 #移除给定字符串中重复 ...

  6. cocos2d-x 资源路径研究

    调用cc.FileUtils:getInstance():addSearchResolutionsOrder("src"); 加入�一个搜索路径,就能够直接载入src文件夹下的资源 ...

  7. Tomcat安装、配置、优化及负载均衡详解

    一.常见JavaWeb服务器      1.WebLogic:是BEA公司的产品.WebSphereAS:是IBM公司的产品.JBossAS:红帽公司的产品,可以自行了解      2.Tomcat服 ...

  8. 进程控制之system函数

    ISO C定义了system函数,但是其操作对系统的依赖性很强.POSIX.1包括了system接口,它扩展了ISO C定义,以描述system在POSIX.1环境中的运行行为. #include & ...

  9. Asp.Net下载页面,并弹出下载提示框

    Asp.Net下载页面,并弹出下载提示框.在删除按钮里调用以下方法.

  10. 未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0” 提供程序解决办法

    ---恢复内容开始--- 最近在用c#写一个处理excel的软件,连接excel的时候出现一个问题未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0” 提供程序,究其原因是我的电脑是 ...