如何反序列化XML到对象

<StepList> <Step> <Name>Name1</Name> <Desc>Desc1</Desc> </Step> <Step> <Name>Name2</Name> <Desc>Desc2</Desc> </Step> </StepList> 

我有这个XML,我应该如何模型类,所以我将能够使用XmlSerializer对象反序列化它?

你的class级应该喜欢这样的

 [XmlRoot("StepList")] public class StepList { [XmlElement("Step")] public List<Step> Steps { get; set; } } public class Step { [XmlElement("Name")] public string Name { get; set; } [XmlElement("Desc")] public string Desc { get; set; } } 

这是我的testing代码。

 string testData = @"<StepList> <Step> <Name>Name1</Name> <Desc>Desc1</Desc> </Step> <Step> <Name>Name2</Name> <Desc>Desc2</Desc> </Step> </StepList>"; XmlSerializer serializer = new XmlSerializer(typeof(StepList)); using (TextReader reader = new StringReader(testData)) { StepList result = (StepList) serializer.Deserialize(reader); } 

如果你想读一个文本文件,你应该加载文件到一个FileStream并反序列化。

 using (FileStream fileStream = new FileStream("<PathToYourFile>",FileMode.Open)) { StepList result = (StepList) serializer.Deserialize(fileStream ); } 

上面的评论是正确的。 你错过了装饰。 如果你想要一个通用的反序列化器,你可以使用这个。

  public static T DeserializeXMLFileToObject<T>(string XmlFilename) { T returnObject = default(T); if (string.IsNullOrEmpty(XmlFilename)) return default(T); try { StreamReader xmlStream = new StreamReader(XmlFilename); XmlSerializer serializer = new XmlSerializer(typeof(T)); returnObject = (T)serializer.Deserialize(xmlStream); } catch (Exception ex) { ExceptionLogger.WriteExceptionToConsole(ex, DateTime.Now); } return returnObject; } 

那么你会这样称呼它:

 MyObjType MyObj = DeserializeXMLFileToObject<MyObjType>(FilePath);