use*_*174 106 c# xml-deserialization
<StepList>
<Step>
<Name>Name1</Name>
<Desc>Desc1</Desc>
</Step>
<Step>
<Name>Name2</Name>
<Desc>Desc2</Desc>
</Step>
</StepList>
Run Code Online (Sandbox Code Playgroud)
我有这个XML,我应该如何建模类,以便我可以使用XmlSerializer对象反序列化它?
dkn*_*ack 206
你的课程应该是这样的
[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; }
}
Run Code Online (Sandbox Code Playgroud)
这是我的测试代码.
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);
}
Run Code Online (Sandbox Code Playgroud)
如果要读取文本文件,则应将文件加载到FileStream中并对其进行反序列化.
using (FileStream fileStream = new FileStream("<PathToYourFile>", FileMode.Open))
{
StepList result = (StepList) serializer.Deserialize(fileStream);
}
Run Code Online (Sandbox Code Playgroud)
Jay*_*obs 28
以上评论是正确的.你错过了装饰者.如果你想要一个通用的反序列化器,你可以使用它.
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;
}
Run Code Online (Sandbox Code Playgroud)
然后你会这样称呼它:
MyObjType MyObj = DeserializeXMLFileToObject<MyObjType>(FilePath);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
197687 次 |
| 最近记录: |