这篇文章主要介绍C#中如何将xml文件反序列化为实例时采用基类还是派生类,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
专注于为中小企业提供网站设计、网站建设服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业城厢免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了数千家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。
基类:
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文件:
WorldWind.xml
派生类的XML文件:
WorldWind.xml www.baidu.com
源码下载:DeserializeTest.rar 提取码:djpe
总结:将xml文件反序列化为类的实例的时候,只要xml文件的根节点的名字与被反序列化的类的名字一致即可。当然了,反序列化成功后,用基类的实例引用去指向反序列化后的派生类的实例也是没问题的。
其它注意事项:
如果在一个类中有静态的成员变量,则在该类调用构造函数实例化之前,会首先实例化静态的成员变量。
以上是“C#中如何将xml文件反序列化为实例时采用基类还是派生类”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注创新互联行业资讯频道!