2013-06-05 29 views
14

Tôi đang cố gắng để deserialize một tài liệu xml:Làm thế nào để Deserialize XML sử dụng DataContractSerializer

<?xml version="1.0"?>    
<games xmlns = "http://serialize"> 
    <game> 
     <name>TEST1</name> 
     <code>TESTGAME1</code> 
     <ugn>1111111</ugn> 
     <bets> 
      <bet>5,00</bet> 
     </bets> 
    </game> 
    <game> 
     <name>TEST2</name> 
     <code>TESTGAME2</code> 
     <ugn>222222</ugn> 
     <bets> 
      <bet>0,30</bet> 
      <bet>0,90</bet> 
     </bets> 
    </game> 
</games> 

cs lớp:

namespace XmlParse 
{ 
    using System.Collections.Generic; 
    using System.Runtime.Serialization; 

    [DataContract(Namespace = "http://serialize")] 
    public class game 
    { 
     #region Public Properties 

     [DataMember] 
     public string name { get; set; } 

     [DataMember] 
     public string code { get; set; } 

     [DataMember] 
     public long ugn { get; set; } 

     [DataMember] 
     public List<decimal> bets { get; set; } 

     #endregion 
    } 

    [KnownType(typeof(game))] 
    [DataContract(Namespace = "http://serialize")] 
    public class games 
    { 
     #region Public Properties 

     [DataMember] 
     public List<game> game { get; set; } 

     #endregion 
    } 
} 

chính:

FileStream fs = new FileStream(Path.Combine(this.path, xmlDocumentName), FileMode.Open); 

XmlDictionaryReader reader = XmlDictionaryReader.CreateTextReader(fs, new XmlDictionaryReaderQuotas()); 
DataContractSerializer ser = new DataContractSerializer(typeof(games)); 

// Deserialize the data and read it from the instance. 
games deserializedPerson = (games)ser.ReadObject(reader, true); 
reader.Close(); 
fs.Close(); 

deserializedPerson lãm count = 0

wh tại cho?

enter image description here

+1

có thể trùng lặp http://stackoverflow.com/questions/15413468/deserializing-xml-with-datacontractserializer?rq=1 –

Trả lời

19

Tôi đã tìm ra. Có thể có các triển khai khác nhưng điều này hoạt động. Đối với cuộc sống của tôi, tôi không thể tìm thấy bất kỳ ví dụ nào sử dụng List bên trong một đối tượng. Dưới đây là một ví dụ làm việc:

tài liệu XML để phân tích:

<?xml version="1.0"?>    
<games xmlns = "http://serialize"> 
    <game> 
     <name>TEST1</name> 
     <code>TESTGAME1</code> 
     <ugn>1111111</ugn> 
     <bets> 
      <bet>5,00</bet> 
     </bets> 
    </game> 
    <game> 
     <name>TEST2</name> 
     <code>TESTGAME2</code> 
     <ugn>222222</ugn> 
     <bets> 
      <bet>0,30</bet> 
      <bet>0,90</bet> 
     </bets> 
    </game> 
</games> 

cs lớp:

namespace XmlParse 
{ 
    using System; 
    using System.Collections.Generic; 
    using System.Globalization; 
    using System.Runtime.Serialization; 

    [DataContract(Name = "game", Namespace = "")] 
    public class Game 
    { 
     [DataMember(Name = "name", Order = 0)] 
     public string Name { get; private set; } 

     [DataMember(Name = "code", Order = 1)] 
     public string Code { get; private set; } 

     [DataMember(Name = "ugn", Order = 2)] 
     public string Ugn { get; private set; } 

     [DataMember(Name = "bets", Order = 3)] 
     public Bets Bets { get; private set; } 
    } 

    [CollectionDataContract(Name = "bets", ItemName = "bet", Namespace = "")] 
    public class Bets : List<string> 
    { 
     public List<decimal> BetList 
     { 
      get 
      { 
       return ConvertAll(y => decimal.Parse(y, NumberStyles.Currency)); 
      } 
     } 
    } 

    [CollectionDataContract(Name = "games", Namespace = "")] 
    public class Games : List<Game> 
    { 
    } 
} 

Đọc và phân tích tài liệu xml:

string fileName = Path.Combine(this.path, "Document.xml"); 
DataContractSerializer dcs = new DataContractSerializer(typeof(Games)); 
FileStream fs = new FileStream(fileName, FileMode.Open); 
XmlDictionaryReader reader = XmlDictionaryReader.CreateTextReader(fs, new XmlDictionaryReaderQuotas()); 

Games games = (Games)dcs.ReadObject(reader); 
reader.Close(); 
fs.Close(); 
+2

Bạn cần thuộc tính đơn đặt hàng beca sử dụng hành vi mặc định là thứ tự chữ cái. –

Các vấn đề liên quan