C#中将xml文件反序列化为实例时采用基类还是派生类的知识点讨论
基类:
usingSystem; usingSystem.Collections.Generic; usingSystem.Linq; usingSystem.Text; namespaceDeserializeTest { publicclassSettingsBase { privatestringm_fileName; publicstringFileName { get{returnm_fileName;} set{m_fileName=value;} } } }
派生类:
usingSystem; usingSystem.Collections.Generic; usingSystem.Linq; usingSystem.Text; namespaceDeserializeTest { publicclassWorldWindSettings:SettingsBase { publicWorldWindSettings() :base() { } privatestringm_proxyUrl=""; publicstringProxyUrl { get { returnm_proxyUrl; } set { this.m_proxyUrl=value; } } } }
主函数调用测试代码为:
usingSystem; usingSystem.Collections.Generic; usingSystem.Linq; usingSystem.Text; usingSystem.IO; usingSystem.Xml.Serialization; namespaceDeserializeTest { classProgram { staticvoidMain(string[]args) { //测试1:测试将xml文件反序列化为基类实例。测试通过。只要xml文件的根节点的名字与被反序列化的类的名字一致即可 stringfileNameBase=@"D:\MyProject\DeserializeTest\DeserializeTest\bin\Debug\GobalConfig\SettingsBase.xml"; SettingsBasesettingsBase; XmlSerializerserBase=newXmlSerializer(typeof(SettingsBase)); using(TextReadertrBase=newStreamReader(fileNameBase)) { settingsBase=(SettingsBase)serBase.Deserialize(trBase); settingsBase.FileName=fileNameBase; } //测试2:测试将xml文件反序列化为子类实例。测试通过。只要xml文件的根节点的名字与被反序列化的类的名字一致即可。当然了,用基类的实例引用去指向反序列化后的派生类的实例也是没问题的。 stringfileName=@"D:\MyProject\DeserializeTest\DeserializeTest\bin\Debug\GobalConfig\WorldWind.xml"; SettingsBasesettings;//当前了此处定义为WorldWindSettingssettings;也没问题 Typetype=typeof(WorldWindSettings);//因为xml文件的根节点名称是WorldWindSettings,此处只能为WorldWindSettings,而不能为SettingsBase XmlSerializerser=newXmlSerializer(type); using(TextReadertr=newStreamReader(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文件的根节点的名字与被反序列化的类的名字一致即可。当然了,反序列化成功后,用基类的实例引用去指向反序列化后的派生类的实例也是没问题的。
其它注意事项:
如果在一个类中有静态的成员变量,则在该类调用构造函数实例化之前,会首先实例化静态的成员变量。
以上就是本次介绍的全部知识点内容,感谢大家的学习和对毛票票的支持。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。