如何反序列化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);