如何将xml反序列化为对象[重复]
Posted
技术标签:
【中文标题】如何将xml反序列化为对象[重复]【英文标题】:How to deserialize xml to object [duplicate] 【发布时间】:2012-05-18 02:28:25 【问题描述】:<StepList>
<Step>
<Name>Name1</Name>
<Desc>Desc1</Desc>
</Step>
<Step>
<Name>Name2</Name>
<Desc>Desc2</Desc>
</Step>
</StepList>
我有这个 XML,
我应该如何对 Class 进行建模以便能够使用 XmlSerializer
对象对其进行反序列化?
【问题讨论】:
【参考方案1】:上面的cmets是正确的。你缺少装饰器。 如果你想要一个通用的反序列化器,你可以使用它。
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);
【讨论】:
【参考方案2】:你的类应该是这样的
[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;
这是我的测试代码。
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);
【讨论】:
[XmlElement("Step")] 是关键 - 删除 XML 中的“step”嵌套 ([XmlElement("Step")]
是关键,是对的。 “- 删除 XML 中的“步骤”嵌套 (以上是关于如何将xml反序列化为对象[重复]的主要内容,如果未能解决你的问题,请参考以下文章
将 Xml 反序列化为对象时出错 - xmlns='' 不是预期的