Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法从xml中读取一个属性_C#_Xml - Fatal编程技术网

C# 无法从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;

我有个奇怪的问题。我有一个数据类型,它存储从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;
        }
    }
[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以获得帮助