C# XmlSerializer可以';t在以下情况下反序列化自己的输出;“外部类型”;提供
我遇到了一种情况,C# XmlSerializer可以';t在以下情况下反序列化自己的输出;“外部类型”;提供,c#,.net-3.5,xml-serialization,C#,.net 3.5,Xml Serialization,我遇到了一种情况,XmlSerializer无法反序列化回它自己的输出。数据结构基本上由一个根类Project组成,其中包含一个ProjectItems属性(属于自定义集合类型),该属性包含单个项。某些项可能递归地包含嵌套项 public class Project { [XmlElement("ProjectItem")] public ProjectItemCollection { get; set; } } XmlSerializer生成的XML如下所示: <Pro
XmlSerializer
无法反序列化回它自己的输出。数据结构基本上由一个根类Project
组成,其中包含一个ProjectItems
属性(属于自定义集合类型),该属性包含单个项。某些项可能递归地包含嵌套项
public class Project
{
[XmlElement("ProjectItem")]
public ProjectItemCollection { get; set; }
}
XmlSerializer
生成的XML如下所示:
<Project>
<ProjectItem xsi:type="ContentOrganizationPlanProjectItem">
<ProjectItem xsi:type="FolderProjectItem">
</ProjectItem>
<ProjectItem xsi:type="FolderProjectItem">
</ProjectItem>
</ProjectItem>
</Project>
注意:所有不重要的东西都将从代码示例中删除
最初,我用xmlclude
属性装饰了ProjectItem
类,以覆盖数据结构中可能出现的所有类型的项。效果很好
但是,由于它需要从独立的程序集进行扩展,因此我必须使用一个动态构造的数组来替换这些属性,该数组包含传递给XmlSerializer
构造函数的extraTypes
参数的所有可能类型
同样,序列化工作正常。问题是,当我尝试反序列化它时,XmlSerializer
抛出一个InvalidCastException
说:
无法将类型为“System.Xml.XmlNode[]”的对象强制转换为类型为“Whatever.ProjectItem”
在这种情况下,如何使XmlSerializer
反序列化自己的输出
旁注:我再也受不了跳
XmlSerializer
子弹了-问题确实很小:
public class Project
{
[XmlElement("ProjectItem", typeof(ProjectItem))]
public ProjectItemCollection { get; set; }
}
在
xmlement
中指定typeof(ProjectItem)
对于序列化是无用的。然而,它对于反序列化非常关键问题确实很小:
public class Project
{
[XmlElement("ProjectItem", typeof(ProjectItem))]
public ProjectItemCollection { get; set; }
}
在
xmlement
中指定typeof(ProjectItem)
对于序列化是无用的。但是,反序列化非常重要如果您继续使用XmlSerializer,您可能会发现XAML序列化(已从WPF中移出,现在在它自己的系统.XAML.dll中完全可用)很有帮助。它非常强大且可扩展。如果您继续使用XmlSerializer,您可能会发现XAML序列化(已从WPF中移出,现在在它自己的System.XAML.dll中完全可用)很有帮助。它功能强大且可扩展。谢谢您的提示。我一定去看看。实际上,我再次非常接近于编写一个XmlSerializer
替代品。太糟糕了,谢谢你的提示。我一定去看看。实际上,我再次非常接近于编写一个XmlSerializer
替代品。简直糟透了。