Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.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_Xml Parsing_Deserialization - Fatal编程技术网

C# 如何反序列化XML数组项?

C# 如何反序列化XML数组项?,c#,xml,xml-parsing,deserialization,C#,Xml,Xml Parsing,Deserialization,我在反序列化XML时遇到问题。我可以使用AccountInformation,但它不能与Leauge元素一起使用。XML不包含任何用于“Leauges”的标记,我不想添加该标记以使其正常工作。有没有其他方法来“修复”它?我尝试过不同的解决方案,但leauges的反序列化结果却没有结果。我错过了什么 感谢您的帮助 请在下面输入我的代码: 更新: 我已经修改了代码和XML,但无论如何我都不会工作。我错过了什么 [可序列化] [XmlRoot(ElementName=“LeaugeCollection

我在反序列化XML时遇到问题。我可以使用AccountInformation,但它不能与Leauge元素一起使用。XML不包含任何用于“Leauges”的标记,我不想添加该标记以使其正常工作。有没有其他方法来“修复”它?我尝试过不同的解决方案,但leauges的反序列化结果却没有结果。我错过了什么

感谢您的帮助

请在下面输入我的代码:

更新:

我已经修改了代码和XML,但无论如何我都不会工作。我错过了什么

[可序列化]
[XmlRoot(ElementName=“LeaugeCollection”,Namespace=”“)]
公开课联盟
{
[XmlArray(“联盟”)]
[XmlArrayItem(“联盟”,类型(联盟))]
公共联盟[]联盟{get;set;}
[xmlement(ElementName=“AccountInformation”)]
公共字符串AccountInformation{get;set;}
}
[可序列化()]
公共阶级联盟
{
[xmlement(ElementName=“Id”)]
公共int Id{get;set;}
[xmlement(ElementName=“Name”)]
公共字符串名称{get;set;}
[xmlement(ElementName=“Country”)]
公共字符串国家{get;set;}
[xmlement(ElementName=“历史数据”)]
公共字符串历史_数据{get;set;}
[xmlement(ElementName=“Fixtures”)]
公共字符串装置{get;set;}
[xmlement(ElementName=“LiveScore”)]
公共字符串Livescore{get;set;}
[xmlement(ElementName=“NumberOfMatches”)]
public int NumberOfMatches{get;set;}
[xmlement(ElementName=“LatestMatch”)]
public DateTime LatestMatch{get;set;}
}
反序列化代码:

publicstaticvoidmain(字符串[]args)
{
XmlSerializer反序列化器=新的XmlSerializer(typeof(LeagueCollection));
TextReader=newstreamreader(@“C:\XmlFiles\xmlsocket.xml”);
object obj=反序列化程序。反序列化(读取器);
LeagueCollection XmlData=(LeagueCollection)obj;
reader.Close();
}


提前谢谢

图像中的XML缺少实际的数组元素(Leauges),它只有array items元素(Leauge),这就是您无法将其反序列化的原因

更新: 好的,为了重现代码,我现在看到在XML中元素拼写为“League”,而在代码中拼写为“Leauge”

先把它修好

更新2:
在您根据我的评论所做的编辑之后,它似乎工作得很好

缺少命名空间。我不喜欢联赛和联赛。联盟是不必要的

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Serialization;
using System.IO;

namespace ConsoleApplication1
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            LeagueCollection leagueCollection = new LeagueCollection() {
                leagues = new Leagues() {
                    League = new List<League>() {
                       new League() {
                          Id = 1,
                          Name = "English Premier League",
                          Country = "England",
                          Historical_Data = "Yes",
                          Fixtures = "Yes",
                          Livescore = "Yes",
                          NumberOfMatches = 5700,
                          LatestMatch = DateTime.Parse( "2015-05-24T16:00:00+00:00")
                    },
                        new League() {
                            Id = 2,
                            Name = "English League Championship",
                            Country = "England",
                            Historical_Data = "Yes",
                            Fixtures = "Yes",
                            Livescore = "Yes",
                            NumberOfMatches = 5700,
                            LatestMatch = DateTime.Parse("2015-05-24T16:00:00+00:00")
                        }
                    }

                },
                AccountInformation = "Confidential info"
            };


            XmlSerializer serializer = new XmlSerializer(typeof(LeagueCollection));

            StreamWriter writer = new StreamWriter(FILENAME);
            serializer.Serialize(writer, leagueCollection);
            writer.Flush();
            writer.Close();
            writer.Dispose();

            XmlSerializer deserializer = new XmlSerializer(typeof(LeagueCollection));

            XmlTextReader reader = new XmlTextReader(FILENAME);
            LeagueCollection XmlData = (LeagueCollection)deserializer.Deserialize(reader);
            reader.Close();

        }
    }
    [XmlRoot(ElementName = "LeaugeCollection")]
    public class LeagueCollection
    {
        [XmlElement("Leagues")]
        public Leagues leagues { get; set; }

        [XmlElement(ElementName = "AccountInformation")]
        public string AccountInformation { get; set; }

    }
    [XmlRoot("Leagues")]
    public class Leagues
    {
        [XmlElement("League")]
        public List<League> League { get; set; }
    }

    [XmlRoot("League")]
    public class League
    {
        [XmlElement(ElementName = "Id")]
        public int Id { get; set; }

        [XmlElement(ElementName = "Name")]
        public string Name { get; set; }

        [XmlElement(ElementName = "Country")]
        public string Country { get; set; }

        [XmlElement(ElementName = "Historical_Data")]
        public string Historical_Data { get; set; }

        [XmlElement(ElementName = "Fixtures")]
        public string Fixtures { get; set; }

        [XmlElement(ElementName = "LiveScore")]
        public string Livescore { get; set; }

        [XmlElement(ElementName = "NumberOfMatches")]
        public int NumberOfMatches { get; set; }

        [XmlElement(ElementName = "LatestMatch")]
        public DateTime LatestMatch { get; set; }
    }

}
​
​
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Xml;
使用System.Xml.Serialization;
使用System.IO;
命名空间控制台应用程序1
{
班级计划
{
常量字符串文件名=@“c:\temp\test.xml”;
静态void Main(字符串[]参数)
{
LeagueCollection LeagueCollection=新LeagueCollection(){
联盟=新联盟(){
联盟=新名单(){
新联盟(){
Id=1,
Name=“英超联赛”,
Country=“英格兰”,
历史数据=“是”,
“是”,
Livescore=“是”,
NumberOfMatches=5700,
LatestMatch=DateTime.Parse(“2015-05-24T16:00:00+00:00”)
},
新联盟(){
Id=2,
Name=“英国联赛冠军”,
Country=“英格兰”,
历史数据=“是”,
“是”,
Livescore=“是”,
NumberOfMatches=5700,
LatestMatch=DateTime.Parse(“2015-05-24T16:00:00+00:00”)
}
}
},
AccountInformation=“机密信息”
};
XmlSerializer serializer=新的XmlSerializer(typeof(LeagueCollection));
StreamWriter writer=新的StreamWriter(文件名);
序列化器。序列化(编写器、联盟集合);
writer.Flush();
writer.Close();
writer.Dispose();
XmlSerializer反序列化器=新的XmlSerializer(typeof(LeagueCollection));
XmlTextReader=新的XmlTextReader(文件名);
LeagueCollection XmlData=(LeagueCollection)反序列化器。反序列化(读取器);
reader.Close();
}
}
[XmlRoot(ElementName=“LeaugeCollection”)]
公开课联盟
{
[XmlElement(“联盟”)]
公共联盟{get;set;}
[xmlement(ElementName=“AccountInformation”)]
公共字符串AccountInformation{get;set;}
}
[XmlRoot(“联盟”)]
公共阶级联盟
{
[XmlElement(“联盟”)]
公共列表联盟{get;set;}
}
[XmlRoot(“联盟”)]
公共阶级联盟
{
[xmlement(ElementName=“Id”)]
公共int Id{get;set;}
[xmlement(ElementName=“Name”)]
公共字符串名称{get;set;}
[xmlement(ElementName=“Country”)]
公共字符串国家{get;set;}
[xmlement(ElementName=“历史数据”)]
公共字符串历史_数据{get;set;}
[xmlement(ElementName=“Fixtures”)]
公共字符串装置{get;set;}
[xmlement(ElementName=“LiveScore”)]
公共字符串Livescore{get;set;}
[xmlement(ElementName=“NumberOfMatches”)]
public int NumberOfMatches{get;set;}
[xmlement(ElementName=“LatestMatch”)]
public DateTime LatestMatch{get;set;}
}
}
​
​
提供