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;
}
}
}
}
主函數(shù)調(diào)用測試代碼為:
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文件的根節(jié)點的名字與被反序列化的類的名字一致即可
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文件的根節(jié)點的名字與被反序列化的類的名字一致即可。當然了,用基類的實例引用去指向反序列化后的派生類的實例也是沒問題的。
string fileName = @"D:\MyProject\DeserializeTest\DeserializeTest\bin\Debug\GobalConfig\WorldWind.xml";
SettingsBase settings;//當前了此處定義為WorldWindSettings settings;也沒問題
Type type = typeof(WorldWindSettings);//因為xml文件的根節(jié)點名稱是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文件反序列化為類的實例的時候,只要xml文件的根節(jié)點的名字與被反序列化的類的名字一致即可。當然了,反序列化成功后,用基類的實例引用去指向反序列化后的派生類的實例也是沒問題的。
其它注意事項:
如果在一個類中有靜態(tài)的成員變量,則在該類調(diào)用構(gòu)造函數(shù)實例化之前,會首先實例化靜態(tài)的成員變量。
以上就是本次介紹的全部知識點內(nèi)容,感謝大家的學(xué)習(xí)和對腳本之家的支持。
- C#復(fù)雜XML反序列化為實體對象兩種方式小結(jié)
- C# 解析XML和反序列化的示例
- C# 中對象序列化XML的方法
- 詳解 C# 中XML對象的序列化和反序列化
- C#實現(xiàn)XML與實體類之間相互轉(zhuǎn)換的方法(序列化與反序列化)
- C# XML序列化方法及常用特性總結(jié)分析
- C#實現(xiàn)xml文件反序列化讀入數(shù)據(jù)到object的方法
- C#實現(xiàn)Xml序列化與反序列化的方法
- C#使用XML序列化操作菜單的方法
- C#實現(xiàn)對象XML序列化的方法
- C#實現(xiàn)復(fù)雜XML的序列化與反序列化
- c#正反序列化XML文件示例(xml序列化)
- C#序列化成XML注意細節(jié)
- C#實現(xiàn)XML序列化與反序列化
相關(guān)文章
C#中調(diào)用SAPI實現(xiàn)語音合成的2種方法
這篇文章主要介紹了C#中調(diào)用SAPI實現(xiàn)語音合成的2種方法,本文直接給出示例代碼,需要的朋友可以參考下2015-06-06
深入學(xué)習(xí)C#網(wǎng)絡(luò)編程之HTTP應(yīng)用編程(下)
這篇文章主要介紹了深入學(xué)習(xí)C#網(wǎng)絡(luò)編程之HTTP應(yīng)用編程的相關(guān)知識,文中講解的非常詳細,幫助大家更好的學(xué)習(xí)c#網(wǎng)絡(luò)編程,感興趣的朋友可以了解下2020-06-06

