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

C# 无法反序列化此XML

C# 无法反序列化此XML,c#,xml,xml-deserialization,last.fm,C#,Xml,Xml Deserialization,Last.fm,只是为了好玩,我在玩Last.fm的API。他们为顶级艺术家返回的XML文件的结构如下: <lfm status="ok"> <topartists user="xbonez" type="overall"> <artist rank="1"> <name>Evanescence</name> <playcount>4618</playcount> <mbid>f4a31f0a-

只是为了好玩,我在玩Last.fm的API。他们为顶级艺术家返回的XML文件的结构如下:

<lfm status="ok">
 <topartists user="xbonez" type="overall">
  <artist rank="1">
  <name>Evanescence</name> 
  <playcount>4618</playcount> 
  <mbid>f4a31f0a-51dd-4fa7-986d-3095c40c5ed9</mbid> 
  <url>http://www.last.fm/music/Evanescence</url> 
  <streamable>1</streamable> 
  <image size="small">http://userserve-ak.last.fm/serve/34/48488613.png</image> 
  <image size="medium">http://userserve-ak.last.fm/serve/64/48488613.png</image> 
  <image size="large">http://userserve-ak.last.fm/serve/126/48488613.png</image> 
  <image size="extralarge">http://userserve-ak.last.fm/serve/252/48488613.png</image> 
  <image size="mega">http://userserve-ak.last.fm/serve/500/48488613/Evanescence++PNG.png</image> 
  </artist>
 </topartists>
</lfm>
然后我使用以下代码反序列化:

string XmlFile = "artists.xml";
            XmlSerializer serializer = new XmlSerializer(typeof(lfmStatus));

            lfmStatus LoadFile;

            using (Stream reader = new FileStream(XmlFile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
            {
                try
                {
                    Console.WriteLine("Beginning deserialization.");

                    // Call the Deserialize method to restore the object's state.
                    LoadFile = (lfmStatus)serializer.Deserialize(reader);

                    return LoadFile.TopArtists;
                }

现在,如果XML没有包含所有艺术家的topartists标记,那么这段代码对XML非常有用。但既然这样,我该如何修改代码来处理它呢?我假设我需要添加另一个类。

您缺少一些类型的属性

有关更多详细信息,请参阅

您还缺少
topartists
元素的类型


如果我是你,我会得到XML模式,然后使用xsd.exe生成C#类,并从中进行修改。如果您确实找不到,它还可以基于XML推断模式,这将根据输入XML为您提供一个可解析的结果。

要查看您编写的反序列化响应XML的正确代码,可以使用XSD。打开VS命令提示符并给出XSD LastFM.xml,该文件将生成和XSD文件。现在给出XSD LastFM.XSD,它将生成一个CS文件。把这个和你写的比较一下,检查一下你是否犯了错误

[Serializable()]
    public class Artists
    {
        [XmlElement("name")]
        public string Name { get; set; }

        [XmlElement("playcount")]
        public int playcount { get; set; }

        [XmlElement("url")]
        public string url { get; set; }

        [XmlElement("streamable")]
        public int streamable { get; set; }

        [XmlElement("image")]
        public string image { get; set; }

    }
string XmlFile = "artists.xml";
            XmlSerializer serializer = new XmlSerializer(typeof(lfmStatus));

            lfmStatus LoadFile;

            using (Stream reader = new FileStream(XmlFile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
            {
                try
                {
                    Console.WriteLine("Beginning deserialization.");

                    // Call the Deserialize method to restore the object's state.
                    LoadFile = (lfmStatus)serializer.Deserialize(reader);

                    return LoadFile.TopArtists;
                }