将具有2个不同XmlElementAttributes的xml反序列化为单个数组

时间:2013-07-23 15:28:56

标签: c# .net xml c#-4.0 deserialization

所以这可能是一些随机请求,但任何帮助都会受到极大的欢迎! 我正在研究一个类似这样的XML文档......

<images>
    <image>
        <url>
            http://www.someUrl.com
        </url>
    </image>

    <bonusimage>
        <url>
            http://www.someOtherUrl.com
        </url>
    </bonusimage>
</images>

我想做的是以下内容:

[XmlArray("images")]
[XmlElementAttribute("image", Type = typeof(CustomImageClass), IsNullable = false)]
[XmlElementAttribute("bonusimage", Type = typeof(CustomImageClass), IsNullable = false)]
[XmlChoiceIdentifierAttribute("ItemsElementName")]
public CustomImageClass[] items;

[XmlElementAttribute(IsNullable = false)]
[XmlIgnoreAttribute()]
public ImageType[] ItemsElementName;

我也有一个枚举定义如下:

[XmlType(IncludeInSchema = false)]
public enum ImageType
{
    [XmlEnumAttribute("image")]
    CustomImage,
    BonusImage,
}

我试图按照以下网页上的第二个方案来描述我的问题。

http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlchoiceidentifierattribute(v=vs.95).aspx

但是,运行此代码会导致以下错误:

为成员'items'指定了不明确的类型。项目'bonusimage'和'image'具有相同的类型。请考虑将XmlElementAttribute与XmlChoiceIdentifierAttribute一起使用。

对于那个巨大的帖子感到抱歉,但是我一直在墙上撞了一会儿,想尽可能多地提供信息!我想我需要第二双眼睛来帮助我看看我哪里出错了。

再次感谢!

1 个答案:

答案 0 :(得分:0)

好的,谢谢你的输入,但不幸的是我需要保持对象的顺序。所以这就是我发现的解决方案:

[XmlArray("images")]
[XmlElementAttribute(Type = typeof(Bonusimage))]
[XmlElementAttribute(Type = typeof(CustomImageClass))]
public CustomImageClass[] items;


[XmlType("bonusimage")]
public class Bonusimage: CustomImageClass
{

}

[XmlType("image")]
public class CustomImageClass
{

}