C# XML反序列化错误 (2,2)

3
学校给我一个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?有任何示例将会很有帮助!

你在项目/类定义中定义了命名空间吗? - mmix
你应该从Projects元素中删除xmlns。或编写自定义序列化程序。或使用.NET SDK中的xsd工具生成与该Xml格式兼容的C#类。 - Glenn Ferrie
2个回答

2

很可能问题在于您没有将正确的命名空间作为Project类的属性进行指定。

您可以告诉XmlSerializer在反序列化期间忽略命名空间(请参见此答案)。

或者,您可以使用XmlTypeAttribute设置适当的命名空间:

[XmlType(Namespace = "http://www.pulse.nl/DynamicsAX/2009/DataSets")]
public class Project 
{
   ...
}

我能够通过结合两个给出的答案来解决这个问题,谢谢! - Jordy Langen

1

我通过结合两个给出的答案来解决了这个问题,谢谢! - Jordy Langen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接