C#中將xml文件反序列化為實(shí)例時(shí)采用基類還是派生類的知識(shí)點(diǎn)討論
基類:
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; } } } }
主函數(shù)調(diào)用測(cè)試代碼為:
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) { //測(cè)試1:測(cè)試將xml文件反序列化為基類實(shí)例。測(cè)試通過。只要xml文件的根節(jié)點(diǎn)的名字與被反序列化的類的名字一致即可 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; } //測(cè)試2:測(cè)試將xml文件反序列化為子類實(shí)例。測(cè)試通過。只要xml文件的根節(jié)點(diǎn)的名字與被反序列化的類的名字一致即可。當(dāng)然了,用基類的實(shí)例引用去指向反序列化后的派生類的實(shí)例也是沒問題的。 string fileName = @"D:\MyProject\DeserializeTest\DeserializeTest\bin\Debug\GobalConfig\WorldWind.xml"; SettingsBase settings;//當(dāng)前了此處定義為WorldWindSettings settings;也沒問題 Type type = typeof(WorldWindSettings);//因?yàn)閤ml文件的根節(jié)點(diǎn)名稱是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 提取碼:djpe
總結(jié):將xml文件反序列化為類的實(shí)例的時(shí)候,只要xml文件的根節(jié)點(diǎn)的名字與被反序列化的類的名字一致即可。當(dāng)然了,反序列化成功后,用基類的實(shí)例引用去指向反序列化后的派生類的實(shí)例也是沒問題的。
其它注意事項(xiàng):
如果在一個(gè)類中有靜態(tài)的成員變量,則在該類調(diào)用構(gòu)造函數(shù)實(shí)例化之前,會(huì)首先實(shí)例化靜態(tài)的成員變量。
以上就是本次介紹的全部知識(shí)點(diǎn)內(nèi)容,感謝大家的學(xué)習(xí)和對(duì)腳本之家的支持。
- C#復(fù)雜XML反序列化為實(shí)體對(duì)象兩種方式小結(jié)
- C# 解析XML和反序列化的示例
- C# 中對(duì)象序列化XML的方法
- 詳解 C# 中XML對(duì)象的序列化和反序列化
- C#實(shí)現(xiàn)XML與實(shí)體類之間相互轉(zhuǎn)換的方法(序列化與反序列化)
- C# XML序列化方法及常用特性總結(jié)分析
- C#實(shí)現(xiàn)xml文件反序列化讀入數(shù)據(jù)到object的方法
- C#實(shí)現(xiàn)Xml序列化與反序列化的方法
- C#使用XML序列化操作菜單的方法
- C#實(shí)現(xiàn)對(duì)象XML序列化的方法
- C#實(shí)現(xiàn)復(fù)雜XML的序列化與反序列化
- c#正反序列化XML文件示例(xml序列化)
- C#序列化成XML注意細(xì)節(jié)
- C#實(shí)現(xiàn)XML序列化與反序列化
相關(guān)文章
C#中調(diào)用SAPI實(shí)現(xiàn)語音合成的2種方法
這篇文章主要介紹了C#中調(diào)用SAPI實(shí)現(xiàn)語音合成的2種方法,本文直接給出示例代碼,需要的朋友可以參考下2015-06-06C#使用selenium實(shí)現(xiàn)操作瀏覽器并且截圖
這篇文章主要為大家詳細(xì)介紹了C#如何使用selenium組件實(shí)現(xiàn)操作瀏覽器并且截圖,文中的示例代碼簡(jiǎn)潔易懂,有需要的小伙伴可以參考一下2024-01-01深入學(xué)習(xí)C#網(wǎng)絡(luò)編程之HTTP應(yīng)用編程(下)
這篇文章主要介紹了深入學(xué)習(xí)C#網(wǎng)絡(luò)編程之HTTP應(yīng)用編程的相關(guān)知識(shí),文中講解的非常詳細(xì),幫助大家更好的學(xué)習(xí)c#網(wǎng)絡(luò)編程,感興趣的朋友可以了解下2020-06-06C# 使用SDL2實(shí)現(xiàn)Mp4文件播放音視頻操作
這篇文章主要介紹了C# 使用SDL2實(shí)現(xiàn)Mp4文件播放音視頻操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-12-12Unity Shader實(shí)現(xiàn)徑向模糊效果
這篇文章主要為大家詳細(xì)介紹了Unity Shader實(shí)現(xiàn)徑向模糊效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08