Xml序列化将无法正常工作

时间:2012-03-06 14:45:40

标签: c# .net wpf xml serialization

我们目前正在使用.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”。

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

2 个答案:

答案 0 :(得分:0)

您需要使用

装饰MediaClass课程
[XmlInclude(typeof(TimeLineMediaClass))]

在上面的示例中,TimelineMediaClass上的外壳错误,意味着样本不会为我编译。如果您将其删除,或者执行具有此名称的不同类,则会收到您描述的错误。

一旦你纠正了外壳,它应该有用 - 它对我有用[注意到我还必须删除ImageMediaClass的属性,这也是你的样本中不存在的。)

答案 1 :(得分:0)

我复制了您的代码,并开始删除[XmlInclude(typeof(ImageMediaClass))]并更正此属性:[XmlInclude(typeof(TimelineMediaClass))][XmlInclude(typeof(TimeLineMediaClass))]。现在,运行您的代码,它工作正常。