反序列化复杂对象的xml [英] deserialize xml in complex object

查看:196
本文介绍了反序列化复杂对象的xml的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我不明白为什么对象为空:

I can't understand why object is null:

        WebClient browse = new WebClient();
        StreamReader res = new StreamReader(browse.OpenRead("http://ws.audioscrobbler.com/2.0/?method=track.getinfo&api_key=b25b959554ed76058ac220b7b2e0a026&artist=cher&track=believe"));
        string result = res.ReadToEnd();

        XmlDocument xmltrackinfo = new XmlDocument();
        xmltrackinfo.InnerXml = result;



        XmlRootAttribute xRoot = new XmlRootAttribute();
        xRoot.ElementName = "lfm";
        xRoot.IsNullable = true;

        XmlSerializer xs = new XmlSerializer(typeof(fm), xRoot);

        fm rez = (fm) xs.Deserialize(new MemoryStream(Encoding.UTF8.GetBytes(result)));



对象模型:

Object Model:

[Serializable()]
[XmlRoot(ElementName = "lfm", IsNullable = true)]
public class fm
{
    [XmlElement("lfm")]
    public Track lfm { get; set; }
}

[Serializable()]
[XmlRoot(ElementName = "artist", IsNullable = true)]
public class artist
{
    public string name { get; set; }
    public string mbid { get; set; }
    public string url { get; set; }
}

[Serializable()]
[XmlRoot(ElementName = "album", IsNullable = true)]
public class album
{
    public string artist { get; set; }
    public string title { get; set; }
    public string mbid { get; set; }
    public string url { get; set; }
    public List<string> image { get; set; }
}

[Serializable()]
[XmlRoot(ElementName = "tag", IsNullable = true)]
public class tag
{
    public string name { get; set; }
    public string url { get; set; }

}

[Serializable()]
[XmlRoot(ElementName = "wiki", IsNullable = true)]
public class wiki
{
    public string summary { get; set; }
    public string content { get; set; }
}

[Serializable()]
[XmlRoot(ElementName = "track", IsNullable = true)]
public class Track
{
    public string id { get; set; }
    public string name { get; set; }
    public string mbid { get; set; }
    public string url { get; set; }
    public string duration { get; set; }
    public string streamable { get; set; }
    public string listeners { get; set; }
    public string playcount { get; set; }
    public artist artist { get; set; }
    public album album { get; set; }
    public List<tag> toptags { get; set; }
    public wiki wiki { get; set; }

}

和XML:

HTTP ?://ws.audioscrobbler.com/2.0/方法= track.getinfo&安培; API_KEY = b25b959554ed76058ac220b7b2e0a026&安培;艺术家=雪儿和放大器;轨=相信

等什么我应该怎么办?

推荐答案

尝试重命名你的 FM LFM

public class lfm
{
    public Track track { get; set; }
}



,然后你也可以摆脱 xRoot 变量:

XmlSerializer xs = new XmlSerializer(typeof(lfm));
lfm rez = (lfm) xs.Deserialize(new MemoryStream(Encoding.UTF8.GetBytes(result)));



此外,你不需要 [Serializable接口] 属性。这是用于二进制序列化和由的XmlSerializer 类是完全忽略。

Also you don't need the [Serializable] attribute. This is used for binary serialization and is completely ignored by the XmlSerializer class.

这篇关于反序列化复杂对象的xml的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆