我使用DataContractSerializer
在C#中反序列化XML文件轉換成對象,一切都反序列化屬性是工作的罰款:)無法與特定名稱
我的問題開始時,我添加一個新的屬性,以我的等級和XML文件。每次我反序列化文件時,我的新屬性名稱是EncryptionKey
,屬性值仍爲null
,但是當我將xml元素和屬性的名稱更改爲anEncryptionKey
時,它正確反序列化而不更改代碼中的任何其他內容。
其實我嘗試了很多屬性名稱的選項,如EncryptKey
,Encrypt
和更多,但我最終以anEncryptionKey
結束。
也許有一些屬性名稱或類似的東西,或者我只需要更多的咖啡因來解決它。
XML文件:
<?xml version="1.0" encoding="utf-8" ?>
<KioskSettings xmlns="http://schemas.datacontract.org/2004/07/Proxies" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<ID>20198</ID>
<HeartBeatInterval>1</HeartBeatInterval>
<ServerURL></ServerURL>
<EncryptionKey>abcd</EncryptionKey>
</KioskSettings>
代碼,我用它來反序列化的文件轉換成目標:
private KioskSettings ReadEngineSettingsFromSimulatorXmlFile()
{
KioskSettings engineSettings = new KioskSettings();
DataContractSerializer serializer = new DataContractSerializer(typeof(KioskSettings));
FileStream fs = new FileStream(@"c:\simulation.xml", FileMode.Open);
XmlDictionaryReader reader = XmlDictionaryReader.CreateTextReader(fs, new XmlDictionaryReaderQuotas());
while (reader.Read())
{
switch (reader.NodeType)
{
case XmlNodeType.Element:
if (serializer.IsStartObject(reader))
{
engineSettings = (KioskSettings)serializer.ReadObject(reader);
}
break;
}
}
fs.Flush(); fs.Close();
reader.Close();
reader = null;
serializer = null;
return engineSettings;
}
KioskSettings類:
public class KioskSettings
{
public string ID { get; set; }
public int HeartBeatInterval {get; set;}
public string ServerURL {get; set;}
public string EncryptionKey { get; set; }
}
注:以上代碼可能包含一些語法錯誤,因爲我修改它使其縮短。
嘗試添加[數據成員] :) –
謝謝你的快速回復,實際上反序列化是除「EncryptionKey設置」所有其他屬性工作正常,無添加「[數據成員]」屬性,當我把它添加到「EncryptionKey設置'屬性只有它已被正確反序列化,但是當我將其添加到剩餘的屬性時,不幸的是它不會再反序列化。 – Ebraheem