2012-02-13 7 views
0

XMLファイルをC#(.net 2.0)でデシリアライズする必要があります。デシリアライズXML

XMLの構造は、このようなものです:

<elements> 
    <element> 
    <id> 
     123 
    </id> 
    <Files> 
     <File id="887" description="Hello World!" type="PDF"> 
     FilenameHelloWorld.pdf 
     </File> 
    </Files> 
    </element> 
<elements> 

私はC#で、この構造を逆シリアル化しようとすると、私はファイル名での問題を取得し、値は、私がコードにしようとしてもどのように、常にNULLです私のFileクラス。

私を助けてください。 ;-)

+3

は私達にあなたのコードを表示します。私たちは失明を助けることはできません。 – Polynomial

+2

このXMLを** what **クラスにシリアル化しようとしていますか? 'Elements'クラスの – gideon

答えて

3

次は私のために正常に動作します:

public class element 
{ 
    [XmlElement("id")] 
    public int Id { get; set; } 

    public File[] Files { get; set; } 
} 

public class File 
{ 
    [XmlAttribute("id")] 
    public int Id { get; set; } 

    [XmlAttribute("description")] 
    public string Description { get; set; } 

    [XmlAttribute("type")] 
    public string Type { get; set; } 

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

class Program 
{ 
    static void Main() 
    { 
     using (var reader = XmlReader.Create("test.xml")) 
     { 
      var serializer = new XmlSerializer(typeof(element[]), new XmlRootAttribute("elements")); 
      var elements = (element[])serializer.Deserialize(reader); 

      foreach (var element in elements) 
      { 
       Console.WriteLine("element.id = {0}", element.Id); 
       foreach (var file in element.Files) 
       { 
        Console.WriteLine(
         "id = {0}, description = {1}, type = {2}, filename = {3}", 
         file.Id, 
         file.Description, 
         file.Type, 
         file.FileName 
        ); 
       } 
      } 

     } 
    } 
} 
+0

ありがとう、完璧に動作します。 – Gunnar

0

これは動作するはずです...特に

[XmlRoot("elements")] 
public class Elements { 
    [XmlElement("element")] 
    public List<Element> Items {get;set;} 
} 
public class Element { 
    [XmlElement("id")] 
    public int Id {get;set;} 
    [XmlArray("Files")] 
    [XmlArrayItem("File")] 
    public List<File> Files {get;set;} 
} 
public class File { 
    [XmlAttribute("id")] 
    public int Id {get;set;} 
    [XmlAttribute("description")] 
    public string Description {get;set;} 
    [XmlAttribute("type")] 
    public string Type {get;set;} 
    [XmlText] 
    public string Filename {get;set;} 
} 

注異なる意味のために異なる属性を使用します。 (あなたのXMLの閉鎖要素を固定した後)確認済み:

string xml = @"..."; // your xml, but fixed 

Elements root; 
using(var sr = new StringReader(xml)) 
using(var xr = XmlReader.Create(sr)) { 
    root = (Elements) new XmlSerializer(typeof (Elements)).Deserialize(xr); 
} 
string filename = root.Items[0].Files[0].Filename; // the PDF 
+1

に' Elements'というプロパティを持たせることはできません。 –

+0

@ダリン私は編集でそれを修正しました –

関連する問題