C#中將xml文件反序列化為實(shí)例時(shí)采用基類(lèi)還是派生類(lèi)的知識(shí)點(diǎn)討論
基類(lèi):
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; }
}
}
}
派生類(lèi):
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文件反序列化為基類(lèi)實(shí)例。測(cè)試通過(guò)。只要xml文件的根節(jié)點(diǎn)的名字與被反序列化的類(lèi)的名字一致即可
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文件反序列化為子類(lèi)實(shí)例。測(cè)試通過(guò)。只要xml文件的根節(jié)點(diǎn)的名字與被反序列化的類(lèi)的名字一致即可。當(dāng)然了,用基類(lèi)的實(shí)例引用去指向反序列化后的派生類(lèi)的實(shí)例也是沒(méi)問(wèn)題的。
string fileName = @"D:\MyProject\DeserializeTest\DeserializeTest\bin\Debug\GobalConfig\WorldWind.xml";
SettingsBase settings;//當(dāng)前了此處定義為WorldWindSettings settings;也沒(méi)問(wèn)題
Type type = typeof(WorldWindSettings);//因?yàn)閤ml文件的根節(jié)點(diǎn)名稱(chēng)是WorldWindSettings,此處只能為WorldWindSettings,而不能為SettingsBase
XmlSerializer ser = new XmlSerializer(type);
using (TextReader tr = new StreamReader(fileName))
{
//settings = (WorldWindSettings)ser.Deserialize(tr);//這兩句代碼都可以通過(guò)!
settings = (SettingsBase)ser.Deserialize(tr);
settings.FileName = fileName;
}
System.Console.WriteLine("Hello");
}
}
}
基類(lèi)的XML文件:
<?xml version="1.0" encoding="utf-8"?> <SettingsBase> <FileName>WorldWind.xml</FileName> </SettingsBase>
派生類(lèi)的XML文件:
<?xml version="1.0" encoding="utf-8"?> <WorldWindSettings> <FileName>WorldWind.xml</FileName> <ProxyUrl>www.baidu.com</ProxyUrl> </WorldWindSettings>
源碼下載:DeserializeTest.rar 提取碼:djpe
總結(jié):將xml文件反序列化為類(lèi)的實(shí)例的時(shí)候,只要xml文件的根節(jié)點(diǎn)的名字與被反序列化的類(lèi)的名字一致即可。當(dāng)然了,反序列化成功后,用基類(lèi)的實(shí)例引用去指向反序列化后的派生類(lèi)的實(shí)例也是沒(méi)問(wèn)題的。
其它注意事項(xiàng):
如果在一個(gè)類(lèi)中有靜態(tài)的成員變量,則在該類(lè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í)體類(lèi)之間相互轉(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)用示例(同步調(diào)用 異步調(diào)用 異步回調(diào))
本文將主要通過(guò)同步調(diào)用、異步調(diào)用、異步回調(diào)三個(gè)示例來(lái)講解在用委托執(zhí)行同一個(gè)加法類(lèi)的時(shí)候的的區(qū)別和利弊2013-12-12
C#關(guān)于Task.Yeild()函數(shù)的討論
這篇文章主要介紹了C#中關(guān)于Task.Yeild()函數(shù)的相關(guān)資料,文中講解非常細(xì)致,幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下2020-07-07
C#實(shí)現(xiàn)redis讀寫(xiě)的方法
這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)redis讀寫(xiě)的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05
C# WinForm控件對(duì)透明圖片重疊時(shí)出現(xiàn)圖片不透明的簡(jiǎn)單解決方法
這篇文章主要介紹了C# WinForm控件對(duì)透明圖片重疊時(shí)出現(xiàn)圖片不透明的簡(jiǎn)單解決方法,結(jié)合實(shí)例形式分析了WinForm圖片重疊后造成圖片不透明的原因與相應(yīng)的解決方法,需要的朋友可以參考下2016-06-06
C# WinForm國(guó)際化實(shí)現(xiàn)的簡(jiǎn)單方法
這篇文章主要介紹了C# WinForm國(guó)際化實(shí)現(xiàn)的簡(jiǎn)單方法,有需要的朋友可以參考一下2014-01-01
詳解C# WebApi 接口測(cè)試工具:WebApiTestClient
這篇文章主要介紹了詳解C# WebApi 接口測(cè)試工具:WebApiTestClient,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-07-07

