2011-01-27 21 views
0

私はこのような構造を持つXMLファイルを持っている:C#XMLシリアル化

<panel> 
<tr> 
    <td> 
      <element> 
       ... smth 
      </element> 
    </td> 
    <td> 
      <element> 
       ... smth 
      </element> 
    </td> 
    <td> 
      <element> 
       ... smth 
      </element> 
    </td> 
</tr> 
<tr> 
    <td> 
      <element> 
       ... smth 
      </element> 
    </td> 
    <td> 
      <element> 
       ... smth 
      </element> 
    </td> 
</tr> 
</panel> 

は、これは私のオブジェクトの構造である:

public class Panel 
{ 
    [XmlArray(ElementName="tr")] 
    [XmlArrayItem(ElementName="td")] 
    public List<tr> Tr { get; set; } 

} 
public class tr 
{ 
    [XmlArray(ElementName="tr")] 
    [XmlArrayItem(ElementName="td")] 
    public List<td> td { get; set; } 
} 

public class td 
{ 
    public Element Element { get; set; } 
} 

デシリアライゼーションの後、私は5つのTRクラスオブジェクトとのパネルを持っています。 (「要素」クラスの内容はあなたの例で指定されていない

public class Panel 
{ 
    [XmlArray(ElementName="panel")] //instead of [XmlArray(ElementName="tr")] 
    [XmlArrayItem(ElementName="tr")] 
    public List<tr> Tr { get; set; } 
. 
. 
} 
+0

を想定しますタグのXMLセクションで? – Ocelot20

答えて

1

これは動作します、それは...、私はただの文字列を作ったことがないなら、あなたは私が注釈に

+0

完璧に動作します。ありがとうございました!私はXmlElementにXmlElementAttributeを変更しました – user592040

+0

あなたの歓迎:) –

0

を修正するために助けることができますそれは):あなたのシリアル化

[XmlRoot(ElementName="panel")] 
public class Panel 
{ 
    [System.Xml.Serialization.XmlElementAttribute("tr")] 
    public List<Tr> tr { get; set; } 
} 

public class Tr 
{ 
    [System.Xml.Serialization.XmlElementAttribute("td")] 
    public List<Td> td { get; set; } 
} 

public class Td 
{ 
    [System.Xml.Serialization.XmlElementAttribute("element")] 
    public Element Element { get; set; } 
} 

public class Element 
{ 
    [System.Xml.Serialization.XmlText] 
    public string prop { get; set; } 
} 
+0

空のtrリストを返します – user592040

0

全体コード:私はあなたがクローズ "" を置くためのもの

namespace ConsoleApplication1 
{ 
class Program 
{ 
    static void Main(string[] args) 
    { 

     var lst = new List<Td>(); 

     var p = new Panel(); 
     p.Tr = new List<tr>(); 
     var tr = new tr(); 
     p.Tr.Add(tr); 
     tr.td = new List<Td>(); 
     tr.td.Add(new Td() { Element = "Val1" }); 
     tr.td.Add(new Td() { Element = "Val2" }); 

     var xmlRel = SerializeObject(p); 


     FileStream fs = new FileStream("ser.xml", FileMode.Create); 
     StreamWriter sw = new StreamWriter(fs); 
     sw.Write(xmlRel); 
     sw.Close(); 
     fs.Close(); 


    } 

    public static String SerializeObject(Object pObject) 
    { 
     try 
     { 
      String XmlizedString = null; 
      MemoryStream memoryStream = new MemoryStream(); 
      XmlSerializer xs = new XmlSerializer(typeof(Panel)); 
      XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8); 

      xs.Serialize(xmlTextWriter, pObject); 
      memoryStream = (MemoryStream)xmlTextWriter.BaseStream; 
      XmlizedString = UTF8ByteArrayToString(memoryStream.ToArray()); 
      return XmlizedString; 
     } 
     catch (Exception e) 
     { 
      System.Console.WriteLine(e); 
      return null; 
     } 
    } 

    private static String UTF8ByteArrayToString(Byte[] characters) 
    { 
     UTF8Encoding encoding = new UTF8Encoding(); 
     String constructedString = encoding.GetString(characters); 
     return (constructedString); 
    } 
} 

[XmlRoot(ElementName = "panel")] 
public class Panel 
{ 
    [XmlElementAttribute("tr")] 
    public List<tr> Tr { get; set; } 

} 
public class tr 
{ 
    [XmlElementAttribute("td")] 
    public List<Td> td { get; set; } 
} 


public class Td 
{ 
    [XmlElementAttribute("element")] 
    public string Element { get; set; } 
} 

}