[英]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.