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"。
编辑:我提供的代码中缺少一些东西。我在其中添加了一些更正;评论中有更多细节。
您需要用装饰MediaClass
类
[XmlInclude(typeof(TimeLineMediaClass))]
在上面的例子中,TimelineMediaClass
的大小写错误,这意味着样本不会为我编译。如果你删除它,或者如果你do有一个不同的类使用这个名称,你会得到你描述的错误。
一旦你纠正了大小写,它应该会起作用——对我来说是这样[注意,我还必须删除ImageMediaClass
的属性,它在你的示例中也不存在]。
我复制您的代码,然后运行删除[XmlInclude(typeof(ImageMediaClass))]
并更正此属性:[XmlInclude(typeof(TimelineMediaClass))]
到[XmlInclude(typeof(TimeLineMediaClass))]
。现在,运行您的代码,它工作得很好。