【发布时间】:2010-01-18 11:38:54
【问题描述】:
这是一个有点长的问题,但我已经尽可能简洁了,所以请多多包涵。在我看来,这就像 XmlSerializer 类中的一个错误,但在我将它提交给 Microsoft 之前,我想看看我是否遗漏了什么,这是完全可能的。
我正在尝试生成以下 XML 作为代表性案例,它本质上是集合的集合,但外部集合具有附加元素:
<Links>
<Name />
<Group>
<Link />
<Link />
</Group>
<Group>
<Link />
<Link />
</Group>
</Links>
序列化类如下:
public class Link { }
public class Links
{
public string Name { get; set; }
[XmlElement("Group")]
public Link[][] Groups { get; set; }
}
运行它的简单测试程序如下:
class Program
{
static void Main()
{
var serializer = new XmlSerializer(typeof(Links));
var links = new Links { Name = "", Groups = new[] {
new[] { new Link(), new Link() },
new[] { new Link(), new Link() } } };
serializer.Serialize(Console.Out, links);
}
}
这使用了using XmlElement to remove the parent node of the collection 的技巧,这意味着不会发出<Groups> 元素,并且对于包含在外部数组(类型为Link[])中的每个对象,<Group> 元素应该是发出。但是,在运行时,XmlSerializer 会出现以下异常:
无法生成临时类(结果=1)。 错误 CS0030:无法将类型“Link[][]”转换为“Link[]” 错误 CS0029:无法将类型“Link[]”隐式转换为“Link[][]”
我的猜测是序列化程序出于某种原因试图展平集合,并认为外部数组中包含的类型是Link而不是Link[],这导致其序列化类作为类型的编译失败不匹配。
你怎么看?这是一个错误吗?在使用XmlSerializer 之后,是否有一种解决方法可以生成我正在使用的 XML?
【问题讨论】:
标签: .net collections xmlserializer