【发布时间】:2011-08-09 08:12:04
【问题描述】:
学校给了我一个 XML 文档,我必须在屏幕上显示信息。据我所知,Xml 反序列化将是最简单/最好的解决方案。
到目前为止我有这个:
public static List<Project> ProjectListDeserialize(string path)
{
XmlSerializer serializer = new XmlSerializer(typeof(List<Project>));
Stream filestream = new FileStream(path, FileMode.Open);
return (List<Project>)serializer.Deserialize(filestream);
}
public static Projects ProjectsDeserialize(string path)
{
XmlSerializer serializer = new XmlSerializer(typeof(Projects));
Stream filestream = new FileStream(path, FileMode.Open);
return (Projects)serializer.Deserialize(filestream);
}
这就是 XML 文档的样子:
<?xml version="1.0" encoding="utf-16" ?>
<Projects xmlns="http://www.pulse.nl/DynamicsAX/2009/DataSets" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Project ID ="1000.0001" CustomerID="1000">
<Name>Project data key performance indicators</Name>
<Status>WorkInProgress</Status>
<StartDate>2011-01-01</StartDate>
<ExpectedCompletionDate>2011-08-01</ExpectedCompletionDate>
<CompletionDate xsi:nil="true" />
</Project>
<Project ID ="1000.0008" CustomerID="1000" ParentID="1000.0001">
<Name>Implementation</Name>
<Status>WaitListed</Status>
<StartDate>2011-06-01</StartDate>
<ExpectedCompletionDate>2011-08-01</ExpectedCompletionDate>
<CompletionDate xsi:nil="true" />
</Project>
</Projects>
两种方法都抛出相同的异常:
<Projects xmlns='http://www.pulse.nl/DynamicsAX/2009/DataSets was not expected
如何正确反序列化上述 xml?任何样本都会有所帮助!
【问题讨论】:
-
您是否在项目/s 类定义中定义了命名空间?
-
您应该从 Projects 元素中删除 xmlns。或编写自定义序列化程序。或使用 .NET SDK 中的 xsd 工具生成与该 Xml 格式兼容的 C# 类
标签: c# xml xml-deserialization