2012-04-05 20 views
1

デシリアライズしようとしている次のようなxmlファイルがあります。xmlファイルを逆シリアル化できません

<info> 
    <result resultCode="0000"><![CDATA[操作成功]]></result> 
    <songlist> 
    <song> 
     <id>63672</id> 
     <name><![CDATA[红玫瑰]]></name> 
     <singer id="1620"><![CDATA[陈奕迅]]></singer> 
     <album id="22056"><![CDATA[认了吧]]></album> 
     <remark><![CDATA[]]></remark> 
     <uploadinguser><![CDATA[]]></uploadinguser> 
     <collectinguser><![CDATA[]]></collectinguser> 
     <source> 
     <link id="3441591" filesize="3842715" format="mp3"><![CDATA[http://space6.j.cn/olympic/edit/672/63672-3842715.mp3]]></link> 
     <link id="3435011" filesize="3843133" format="mp3"><![CDATA[http://f8.wretch.yimg.com/satyedhome/32764/1165646407.mp3]]></link> 
     <link id="3434519" filesize="3842715" format="mp3"><![CDATA[http://space0.j.cn/olympic/edit/672/63672-3842715.mp3]]></link> 
     </source> 
    </song> 
    <song> 
     <id>67228</id> 
     <name><![CDATA[光荣]]></name> 
     <singer id="106"><![CDATA[BOBO]]></singer> 
     <album id="22523"><![CDATA[光荣]]></album> 
     <remark><![CDATA[]]></remark> 
     <uploadinguser><![CDATA[]]></uploadinguser> 
     <collectinguser><![CDATA[]]></collectinguser> 
     <source> 
     <link id="3437626" filesize="5106906" format="mp3"><![CDATA[http://blog.heinekenf1.net/music/gr.mp3]]></link> 
     <link id="3441621" filesize="3394663" format="mp3"><![CDATA[http://space6.j.cn/olympic/edit/228/67228-3394663.mp3]]></link> 
     <link id="3090938" filesize="3395499" format="mp3"><![CDATA[http://space5.j.cn/olympic/convert/228/67228-3395499.mp3]]></link> 
     </source> 
    </song> 
    <song>...</song> 
    <song>...</song> 
    <song>...</song> 
    <song>...</song> 
    <song>...</song> 
    <song>...</song> 
    </songlist> 
</info> 

現在、これは私がモデルとして持っているものです。

[XmlRoot("info")] 
public class Response 
{ 
    [XmlElement("result")] 
    public Result Results { get; set; } 

    [XmlArray("songlist")] 
    [XmlArrayItem("song", typeof(Song))] 
    Song[] SongList { get; set; } 
} 
public class Result 
{ 
    [XmlAttribute("resultCode")] 
    public int ResultCode { get; set; } 
} 
public class Song 
{ 
    [XmlElement("name")] 
    public string Name { get; set; } 

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

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

    [XmlArray("source")] 
    [XmlArrayItem("link", typeof(Link))] 
    public Link[] Sources { get; set; } 
} 
public class Link 
{ 
    [XmlAttribute("filesize")] 
    public int FileSize { get; set; } 
    [XmlAttribute("format")] 
    public string Format { get; set; } 
    [XmlText] 
    public string URI { get; set; } 
} 

しかし、私は以下のコードを使用してデシリアライズしようとしたとき、それが正しい解析されない、つまり、私はresultCodeが表示されません曲リスト(エラーはありません)もありません。

XmlSerializer s = new XmlSerializer(typeof(Response), new XmlRootAttribute("info")); 
Response response = (Response)s.Deserialize(data.CreateReader()); 

任意のヒント?

+1

タイトルの末尾に "C#4.0"のようなものを追加しないでください。それがタグのためのものです。また、あなたの質問はC#の特定のバージョンに固有なものではないので、あなたは特定する必要はありません。バージョン。 –

+0

データオブジェクトは何ですか? .CreateReaderは何をしますか?それはXmlTextReaderを返しますか? –

+0

私があなたに提供できる唯一のアドバイスは、それを一枚ずつデシリアライズしようとすることです。あなたは一人で行こうとしています。それは動作していないものを追跡するのが難しいでしょう。とにかく私は過去に同様の問題にどのように近づいたのですか? – DukeOfMarmalade

答えて

4

まず、シリアル化では公開プロパティのみが使用されるため、すべてのプロパティがpublicであることを確認します。あなたのソング[]にはアクセス修飾子がなく、デフォルトでプライベートに設定されています。

xmlを逆シリアル化するためにこれを最初に使用してください。私はそれを動作させるためにいくつかの変更がありました。例えば。 XmlArrayではなくXmlElementを使用して、SongList要素を作成します。

[XmlRoot("info")] 
public class Response 
{ 
    [XmlElement("result")] 
    public Result Result { get; set; } 

    [XmlElement("songlist")] 
    public SongList SongList { get; set; } 
} 

public class Result 
{ 
    [XmlAttribute("resultCode")] 
    public int ResultCode { get; set; } 

    [XmlText] 
    public string Value { get; set; } 
} 

public class SongList 
{ 
    [XmlElement("song")] 
    public Song[] Songs { get; set; } 
} 

public class Song 
{ 
    [XmlElement("id")] 
    public string Id { get; set; } 
} 

希望します。

関連する問題