基类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace DeserializeTest
{
public class SettingsBase
{
private string m_fileName; public string FileName
{
get { return m_fileName; }
set { m_fileName = value; }
} }
}

派生类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace DeserializeTest
{
public class WorldWindSettings : SettingsBase
{
public WorldWindSettings()
: base()
{
} private string m_proxyUrl = ""; public string ProxyUrl
{
get
{
return m_proxyUrl;
}
set
{
this.m_proxyUrl = value;
}
}
}
}

主函数调用测试代码为:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; using System.IO;
using System.Xml.Serialization; namespace DeserializeTest
{
class Program
{
static void Main(string[] args)
{
//测试1:测试将xml文件反序列化为基类实例。测试通过。只要xml文件的根节点的名字与被反序列化的类的名字一致即可
string fileNameBase = @"D:\MyProject\DeserializeTest\DeserializeTest\bin\Debug\GobalConfig\SettingsBase.xml";
SettingsBase settingsBase;
XmlSerializer serBase = new XmlSerializer(typeof(SettingsBase));
using (TextReader trBase = new StreamReader(fileNameBase))
{
settingsBase = (SettingsBase)serBase.Deserialize(trBase);
settingsBase.FileName = fileNameBase;
} //测试2:测试将xml文件反序列化为子类实例。测试通过。只要xml文件的根节点的名字与被反序列化的类的名字一致即可。当然了,用基类的实例引用去指向反序列化后的派生类的实例也是没问题的。
string fileName = @"D:\MyProject\DeserializeTest\DeserializeTest\bin\Debug\GobalConfig\WorldWind.xml";
SettingsBase settings;//当前了此处定义为WorldWindSettings settings;也没问题
Type type = typeof(WorldWindSettings);//因为xml文件的根节点名称是WorldWindSettings,此处只能为WorldWindSettings,而不能为SettingsBase
XmlSerializer ser = new XmlSerializer(type);
using (TextReader tr = new StreamReader(fileName))
{
//settings = (WorldWindSettings)ser.Deserialize(tr);//这两句代码都可以通过!
settings = (SettingsBase)ser.Deserialize(tr);
settings.FileName = fileName;
} System.Console.WriteLine("Hello");
}
}
}

基类的XML文件:

<?xml version="1.0" encoding="utf-8"?>
<SettingsBase>
<FileName>WorldWind.xml</FileName>
</SettingsBase>

派生类的XML文件:

<?xml version="1.0" encoding="utf-8"?>
<WorldWindSettings>
<FileName>WorldWind.xml</FileName>
<ProxyUrl>www.baidu.com</ProxyUrl>
</WorldWindSettings>

源码下载:DeserializeTest.rar    提取码:pkya

总结:将xml文件反序列化为类的实例的时候,只要xml文件的根节点的名字与被反序列化的类的名字一致即可。当然了,反序列化成功后,用基类的实例引用去指向反序列化后的派生类的实例也是没问题的。

C#中将xml文件反序列化为实例时采用基类还是派生类的问题的更多相关文章

  1. Java中将xml文件转化为json的两种方式

    原文地址https://blog.csdn.net/a532672728/article/details/76312475 最近有个需求,要将xml转json之后存储在redis中,找来找去发现整体来 ...

  2. Interproscan, xml文件转化为tsv

    将interproscan的结果转化格式 很奇怪 tsv格式里没有go, kegg, inter-domain信息,但是xml文件里面却有,tsv文件比较好处理,所以先将xml文件转化为tsv.用软件 ...

  3. DI容器Ninject在管理接口和实现、基类和派生类并实现依赖注入方面的实例

    当一个类依赖于另一个具体类的时候,这样很容易形成两者间的"强耦合"关系.我们通常根据具体类抽象出一个接口,然后让类来依赖这个接口,这样就形成了"松耦合"关系,有 ...

  4. 在xml文件中写入&符号时需要对其进行转义

    如:在xml文件中保存这样的测试文件: <?xml version="1.0" encoding="utf-8"?> <datas> & ...

  5. 使用DataContractJsonSerializer类将类型实例序列化为JSON字符串和反序列化为实例对象 分类: JSON 前端 2014-11-10 10:20 97人阅读 评论(1) 收藏

    一.JSON简介 JSON(JavaScript Object Notation,JavaScript对象表示法)是一种轻量级的数据交换格式. JSON是"名值对"的集合.结构由大 ...

  6. xml文件生成方式一(字符串拼接,将多实体类对象写入xml文件)

    1.xml文件生成,拼接字符串使用StringBuffer或StringBuilder 2.拼接好后写入文件即可,将多个实体类写入xml文件 3.这种方式比较简单,但是操作也比较麻烦 4.下面是我的代 ...

  7. 基类,派生类,内存分配情况 .xml

    pre{ line-height:1; color:#1e1e1e; background-color:#d2d2d2; font-size:16px;}.sysFunc{color:#627cf6; ...

  8. XML字符串反序列化为实体

    JSON反序列化实体 paydata = StringHelper.Base64ToString(paydata); resInfo = JsonConvert.DeserializeObject&l ...

  9. mybaties实体的 Mapper.xml文件中自定义sql时模糊查询的写法

    <select  id=selectByNameLike" parameterType="string" resultMap="BaseResultMap ...

随机推荐

  1. 1519484 - How to analyze network disconnections shown in system log (transaction SM21)

    Symptom System log (transaction SM21) shows network disconnections, e.g.: Q04 Connection to user 264 ...

  2. 结对项目(java实现)

    一 .Github项目地址:https://github.com/734635746/MyApp 二.PSP表格 PSP2.1 Personal Software Process Stages 预估耗 ...

  3. Eclipse不支持tomcat8_compiler编译级别选不到1.8

    -------------------------------------------------------------- Eclipse不支持tomcat8 如果你要使用tomcat8.0+版本的 ...

  4. JavaScript笔记02_对象

    目录 1. 函数 1. 函数创建 2. 函数的参数 2. return.break.continue 3. 立即执行函数 4. 对象 5. 枚举对象中的属性 6. 声明提前 1.变量的声明提前 2. ...

  5. golang的channel实现

    golang的channel实现位于src/runtime/chan.go文件.golang中的channel对应的结构是: // Invariants: // At least one of c.s ...

  6. springdata jpa 关于分页@Query问题

    关于springdata jpa 分页问题相信很多小伙伴都遇到过,只要表中数量到达分页条件就会报错 废话少说直接上代码: @Query(nativeQuery = true, value = &quo ...

  7. QQ推广工具

    目前比较简单易用的QQ推广工具有:一键加群.在线聊天 一.一键加群 1.官网链接 http://qun.qq.com/join.html 2.使用 1登录自己的QQ 2创建一个想要作为推广的群 3选择 ...

  8. JMeter压测时报“内存不足”故障的9个简单解决方案

    Test failed! java.lang.OutOfMemoryError: Java heap space 测试失败了!java.lang.OutOfMemoryError:Java堆空间 在不 ...

  9. 删除线性表中所有值为x的元素

    时间复杂度O(n),空间复杂度O(1). 简单的问题两种不同的思路. 代码: #include <stdio.h> #define MAX 100 struct sqlist{ int d ...

  10. SparkSQL读写外部数据源-基本操作load和save

    数据源-基本操作load和save object BasicTest { def main(args: Array[String]): Unit = { val spark = SparkSessio ...