2017-01-20 5 views
1

後、私は私のクラスにXMLをシリアライズしてみてください。一覧XMLシリアル化

[XmlRoot(ElementName = "order")] 
public class OrderModel 
{ 
    [XmlElement(ElementName = "purchaser")] 
    public CompanyModel Purchaser { get; set; } 

    [XmlElement(ElementName = "deliverver")] 
    public CompanyModel Deliverver { get; set; } 

    [XmlElement(ElementName = "position")] 
    public List<OrderPositionModel> Positions { get; set; } 
} 

public class OrderPositionModel 
{ 
    [XmlElement(ElementName = "id")] 
    public int id { get; set; } 

    [XmlElement(ElementName = "lp")] 
    public int OrdinalNumber { get; set; } 

    [XmlElement(ElementName = "name")] 
    public string Name { get; set; } 

    [XmlElement(ElementName = "quantity")] 
    public int Quantity { get; set; } 
} 

シリアライズした後、私は良いリストの長さを持つオブジェクトを取得しますが、その要素が空のID、LP、名前とquantitiyを持っています。

UPDATE シリアライズ方法

private object XmlReader(HttpPostedFileBase file, Type type) 
    { 
     var document = new XmlDocument(); 
     document.Load(file.InputStream); 

     string stream = document.OuterXml; 

     StringReader strReader = null; 
     XmlSerializer serializer = null; 
     XmlTextReader xmlReader = null; 
     Object obj = null; 

     try 
     { 
      strReader = new StringReader(stream); 
      serializer = new XmlSerializer(type); 
      xmlReader = new XmlTextReader(strReader); 
      obj = serializer.Deserialize(xmlReader); 
     } 
     catch (Exception) 
     { 
      //Handle Exception Code 
     } 
     finally 
     { 
      if (xmlReader != null) 
      { 
       xmlReader.Close(); 
      } 
      if (strReader != null) 
      { 
       strReader.Close(); 
      } 
     } 
     return obj; 
    } 

このような何かが、その後、私は

<order> 
<purchaser> 
    <name>name1</name> 
    <address>address1</address> 
</purchaser> 
<deliverver> 
    <name>name2</name> 
    <address>address2</address> 
</deliverver> 
<position id="17" name="pos1" lp="1" quantity="1"/> 
<position id="21" name="pos2" lp="2" quantity="2"/> 
</order> 
+0

は、あなたのシリアル化コードを表示することができます(私も不要だったものをすべて削除しましたか)? –

+0

@AliBaig – Quiet

+0

を更新して、ロードしようとしているXMLを貼り付けます。 – Aybe

答えて

1

最も簡単な作業このXMLを試すブロックに

UPDATE#2 を使用して追加します例:

属性の一部はXMLElementで装飾されていたので、代わりにXMLAttributeで装飾する必要があることに注意してください。

using System.Collections.Generic; 
using System.Xml; 
using System.Xml.Serialization; 

namespace ConsoleApplication1 
{ 
    internal class Program 
    { 
     private static void Main(string[] args) 
     { 
      var filename = @"..\..\XMLFile1.xml"; 
      var model = Read(filename); 
     } 

     private static OrderModel Read(string filename) 
     { 
      using (var reader = XmlReader.Create(filename)) 
      { 
       var serializer = new XmlSerializer(typeof(OrderModel)); 
       var model = (OrderModel) serializer.Deserialize(reader); 
       return model; 
      } 
     } 
    } 

    [XmlRoot(ElementName = "order")] 
    public class OrderModel 
    { 
     [XmlElement(ElementName = "purchaser")] 
     public CompanyModel Purchaser { get; set; } 

     [XmlElement(ElementName = "deliverver")] 
     public CompanyModel Deliverver { get; set; } 

     [XmlElement(ElementName = "position")] 
     public List<OrderPositionModel> Positions { get; set; } 
    } 

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

     [XmlAttribute("lp")] 
     public int OrdinalNumber { get; set; } 

     [XmlAttribute("name")] 
     public string Name { get; set; } 

     [XmlAttribute("quantity")] 
     public int Quantity { get; set; } 
    } 

    public class CompanyModel 

    { 
     [XmlElement(ElementName = "name")] 
     public string Name { get; set; } 

     [XmlElement(ElementName = "address")] 
     public string Address { get; set; } 
    } 
}