我使用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