C# 无法从xml中读取一个属性
我有个奇怪的问题。我有一个数据类型,它存储从xml文件读取的信息。 该类(重要部分)如下所示:C# 无法从xml中读取一个属性,c#,xml,C#,Xml,我有个奇怪的问题。我有一个数据类型,它存储从xml文件读取的信息。 该类(重要部分)如下所示: [Serializable] public class myClass { #region XML Properties [XmlAttribute("Name")] public string Name; [XmlAttribute("prop1")] public string prop1;
[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;
}
}
[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];
}
}
}
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);
...
<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" />
...
myClassList类如下所示:
[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;
}
}
[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];
}
}
}
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);
...
<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" />
...
xml文件的简短部分:
<myClassList>
<myClass Name="test" prop1="test2" prop3="blabla" ...[etc] />
</myClassList>
prop1、prop2、prop3等都可以正常工作,但不是为了名字。
为什么不呢?对我来说,它们看起来都一样。我错过了什么?
(我还没有设计这个,所以我不能100%确定它是如何工作的)
编辑:
正如SoMoS建议的那样,我尝试使用xsd.exe(第一次使用,所以我可能做错了)。我使用命令xsd myFile.xml/o:E:\temp
,得到了一个新文件。在新文件中,它如下所示:
[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;
}
}
[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];
}
}
}
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);
...
<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" />
...
。。。
...
这对任何人都有帮助吗?我将使用xsd.exe工具生成XML类读取器,以便您能够发现差异
检查这里:经过大量调试和测试,我意识到文件路径被另一种方法覆盖了。一旦我修好了,一切都正常了。因此,问题从来不是xml读取,而是另一种改变路径的方法。在这种情况下,当您处理xml文件时,名称可能是一个保留关键字吗?不,名称就是我在这里所说的名称。在我的实际代码中,它的名称不同(确切地说不是保留名称),我真的不知道发生了什么,但该工具没有生成属性的事实表明发生了一些事情。我建议使用以下命令:xsd myFile.xml/o:E:\temp/c并查看生成的类command@JohanHjalmarsson:噢,对不起。今天早上我似乎有点困了:好吧,使用xsd.exe的主要目的是看看它是如何创建类的,所以你可以用同样的方法创建它们,所以使用/C是必不可少的。我解决了它。。。我可能也很困,因为解决方案真的很愚蠢^^如果你有兴趣,请检查我的答案:P thx以获得帮助