我有一个奇怪的问题。我有这个数据类型存储从xml文件读取的信息。 课程(重要部分)如下所示:
[Serializable]
public class myClass
{
#region XML Properties
[XmlAttribute("Name")]
public string Name;
[XmlAttribute("prop1")]
public string prop1;
[XmlAttribute("prop2")]
public string prop2;
[XmlAttribute("prop3")]
public char prop3;
...etc...
public myClassList readXml(string xml_file)
{
myClassList myList = new myClassList();
XmlSerializer mySerializer = new XmlSerializer(typeof(myClassList));
FileStream fs = new FileStream(xml_file, FileMode.Open);
myList = (myClassList)mySerializer.Deserialize(fs);
fs.Close();
return myList;
}
}
myClassList-class看起来像这样:
[XmlRoot("myClassList")]
public class myClassList : CollectionBase
{
public virtual void Add(myClass c)
{
this.List.Add(c);
}
public virtual myClass this[int Index]
{
get
{
return (myClass)this.List[Index];
}
}
}
xml文件的短片:
<myClassList>
<myClass Name="test" prop1="test2" prop3="blabla" ...[etc] />
</myClassList>
然后我尝试使用它:
myClassList test = myClass.readXml("C:\\test\\file.xml");
System.Diagnostics.Trace.WriteLine("name"+test[0].Name);
System.Diagnostics.Trace.WriteLine("name"+test[0].prop1);
System.Diagnostics.Trace.WriteLine("name"+test[0].prop2);
System.Diagnostics.Trace.WriteLine("name"+test[0].prop3);
使用prop1,prop2,prop3等一切正常但名称不适用。 为什么不?对我来说,他们看起来都一样。我错过了什么? (我没有设计这个,所以我不能100%确定它是如何工作的)
修改
正如SoMoS所建议的,我尝试使用xsd.exe(我第一次使用,所以我可能做错了。)我使用命令xsd myFile.xml /o:E:\temp
并获得了一个新文件。在新文件中,它看起来像这样:
...
<xs:attribute name="Name" type="xs:string" />
<xs:attribute name="prop1" type="xs:string" />
<xs:attribute name="prop2" type="xs:string" />
<xs:attribute name="prop3" type="xs:string" />
...
这对任何人都有帮助吗?
答案 0 :(得分:1)
我会使用xsd.exe工具生成XML类阅读器,以便您发现差异。
点击此处:XSD.exe
答案 1 :(得分:0)
经过大量的调试和测试后,我发现文件路径被其他方法覆盖了。一旦我解决了这个问题,一切正常。所以问题从来都不是xml读取,而是另一种改变路径的方法&lt;。&lt;