XmlSerialization获胜';不起作用

本文关键字:不起作用 获胜 XmlSerialization | 更新日期: 2023-09-27 18:27:06

我们目前正在使用.NET框架中的XmlSerializer开发应用程序。

以下是我们类的结构:

[XmlInclude(typeof(TimeLineMediaClass))]
[XmlInclude(typeof(ImageMediaClass))]
public abstract class MediaClass
{
    public string filename { get; set; }
    public string maintitle { get; set; }
    public string subtitle { get; set; }
    public Type typeOfMedia { get; set; }
}

[XmlInclude(typeof(AudioMediaClass))]
[XmlInclude(typeof(VideoMediaClass))]
public abstract class TimeLineMediaClass : MediaClass
{
    public string title { get; set; }
    public TimeSpan length { get; set; }
    public string genre { get; set; }
}

public class AudioMediaClass : TimeLineMediaClass
{
    public string artist { get; set; }
}

public class VideoMediaClass : TimeLineMediaClass
{
    public string director { get; set; }
    public string studios { get; set; }
}

public class ImageMediaClass : MediaClass
{
    public string width { get; set; }
    public string height { get; set; }
}

不同类型的几个媒体被添加到List中,这就是我们想要序列化的。

这就是序列化程序的安装方式:

XmlSerializer serializer = new XmlSerializer(typeof(List<MediaClass>));

但是,当我们启动程序并尝试序列化时,会抛出一个异常,声明"不需要AudioMediaClass"。

编辑:我提供的代码中缺少一些东西。我在其中添加了一些更正;评论中有更多细节。

XmlSerialization获胜';不起作用

您需要用装饰MediaClass

[XmlInclude(typeof(TimeLineMediaClass))]

在上面的例子中,TimelineMediaClass的大小写错误,这意味着样本不会为我编译。如果你删除它,或者如果你do有一个不同的类使用这个名称,你会得到你描述的错误。

一旦你纠正了大小写,它应该会起作用——对我来说是这样[注意,我还必须删除ImageMediaClass的属性,它在你的示例中也不存在]。

我复制您的代码,然后运行删除[XmlInclude(typeof(ImageMediaClass))]并更正此属性:[XmlInclude(typeof(TimelineMediaClass))][XmlInclude(typeof(TimeLineMediaClass))]。现在,运行您的代码,它工作得很好。