[英]C# program will not deserialize xml file
這個問題的背景是一個月項目的里程碑。 總體情況是在視頻傳感器軟件主機與其目標外設之間創建虛擬接口,以便可以抽象出某些硬件差異。
現在,我正在建立我的類,並對包含我的團隊項目將要處理的數據結構的xml文件進行反序列化。 這是處理反序列化的代碼部分:
MainWindow.xaml.cs(GUI主類)
private void DeserializeEdsSettings()
{
XmlSerializer serializer = new XmlSerializer(typeof(EDSRegisters));
FileStream fs = new FileStream(EDSFileLocation, FileMode.Open);
Statics.edsRegisters = (EDSRegisters) serializer.Deserialize(fs);
fs.Close();
Statics.EDSPackets = new ObservableCollection<EDSRegister>(); //Statics parameter.
foreach (EDSRegister register in Statics.edsRegisters.storedRegisters)
{
Statics.EDSPackets.Add(register.DeepClone());
}
}
這是與下面的XML文件中的EDSRegister標記相對應的基本類。 這種結構是我將要使用的數據的基礎。
[Serializable]
public class EDSRegister : INotifyPropertyChanged
{
private bool _IsVisible = true;
[System.Xml.Serialization.XmlIgnore]
public bool IsVisible
{
get { return _IsVisible; }
set
{
_IsVisible = value;
NotifyPropertyChanged("IsVisible");
}
}
private string _RegisterAddress = "Enter Register Value";
private string RegisterAddress
{
get { return _RegisterAddress; }
set
{
_RegisterAddress = value;
NotifyPropertyChanged("RegisterAddress");
}
}
這是EDSRegisters的Collection的包裝,以及將數據反序列化到的內容。 請注意,ObservableCollection的Count始終保持為0。
public class EDSRegisters
{
[XmlArray("EDSRegisters")]
[XmlArrayItem("EDSRegister")]
public ObservableCollection<EDSRegister> storedRegisters = new ObservableCollection<EDSRegister>();
public EDSRegisters()
{
}
}
這是我要反序列化的xml文件
<?xml version="1.0"?>
<EDSRegisters>
<EDSRegister>
<RegisterAddress>0</RegisterAddress>
</EDSRegister>
<EDSRegister>
<RegisterAddress>1</RegisterAddress>
</EDSRegister>
<EDSRegister>
<RegisterAddress>2</RegisterAddress>
</EDSRegister>
<EDSRegister>
<RegisterAddress>3</RegisterAddress>
</EDSRegister>
</EDSRegisters>
請注意,我還想知道如何自己調試該問題。 我是C#的新手,在沒有太多UnitTesting經驗的情況下就能夠順利滑行,這可能說明了我的經驗水平。
感謝您能給我的任何幫助。
您可以將您的班級更改為此:
[XmlRoot("EDSRegister")]
public class EDSRegister {
}
[XmlRoot("EDSRegisters")]
public class EDSRegisters : ObservableCollection<EDSRegister> {
public EDSRegisters() {
}
}
樣本序列化:
var foo = @"<?xml version=""1.0""?>
<EDSRegisters>
<EDSRegister>
<RegisterAddress>0</RegisterAddress>
</EDSRegister>
<EDSRegister>
<RegisterAddress>1</RegisterAddress>
</EDSRegister>
<EDSRegister>
<RegisterAddress>2</RegisterAddress>
</EDSRegister>
<EDSRegister>
<RegisterAddress>3</RegisterAddress>
</EDSRegister>
</EDSRegisters>";
XmlSerializer serializer = new XmlSerializer(typeof(EDSRegisters));
var bar = serializer.Deserialize(new StringReader(foo));
筆記:
[Serializable]
對xml序列化器無效-僅用於二進制序列化
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.