How to Deserialize XML using DataContractSerializer

匿名 (未验证) 提交于 2019-12-03 01:08:02

问题:

I'm trying to deserialize an xml document:

TEST1TESTGAME1         11111115,00TEST2TESTGAME2         2222220,300,90

.cs class:

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 bets { get; set; }          #endregion     }      [KnownType(typeof(game))]     [DataContract(Namespace = "http://serialize")]     public class games     {         #region Public Properties          [DataMember]         public List game { get; set; }          #endregion     } } 

Main:

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

what gives?

回答1:

I figured it out. Maybe there are other implementations but this works. For the life of me I couldn't find any examples that use List inside an object. Here is a working example:

XML document to parse:

TEST1TESTGAME1         11111115,00TEST2TESTGAME2         2222220,300,90

.cs class:

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     {         public List BetList         {             get             {                 return ConvertAll(y => decimal.Parse(y, NumberStyles.Currency));             }         }     }      [CollectionDataContract(Name = "games", Namespace = "")]     public class Games : List     {     } } 

Read and parse xml document:

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(); 


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!