这是一个有点长的问题,但我已经尽可能简洁了,所以请多多包涵。在我看来,这就像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);
}
}
这采用了usingXmlElement
删除集合的父节点的技巧,这意味着不会<Groups>
发出任何元素,并且对于外部数组中包含的每个对象(将是 type Link[]
),<Group>
都应该发出一个元素。但是,在运行时,这会产生以下异常XmlSerializer
:
无法生成临时类(结果=1)。错误 CS0030:无法将类型“Link[][]”转换为“Link[]”错误 CS0029:无法将类型“Link[]”隐式转换为“Link[][]”
我的猜测是,序列化程序出于某种原因试图展平集合,并认为外部数组中包含的类型是Link
而不是Link[]
导致其序列化类的编译失败,因为类型不匹配。
你怎么看?这是一个错误吗?并且有没有一种解决方法来生成我使用后的 XML XmlSerializer
?