2013-06-05 14 views
14

Sto cercando di deserializzare un documento XML:come deserializzare XML utilizzando 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 classe:

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 
    } 
} 

principale:

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 mostra count = 0

wh alle dà?

enter image description here

+1

Possibile http duplicato://stackoverflow.com/questions/15413468/deserializing-xml-with-datacontractserializer?rq=1 –

risposta

19

ho capito. Forse ci sono altre implementazioni ma questo funziona. Per la vita di me non sono riuscito a trovare alcun esempio che usi List all'interno di un oggetto. Ecco un esempio di lavoro:

documento XML per analizzare:

<?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 classe:

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> 
    { 
    } 
} 

Leggere e analizzare il documento 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

È necessario l'attributo ordine perché utilizzare il comportamento predefinito è Ordine alfabetico. –

Problemi correlati