【问题标题】:XmlSerialization won't workXmlSerialization 不起作用
【发布时间】:2012-03-06 14:45:40
【问题描述】:

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

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

【问题讨论】:

  • 这似乎是 xml 命名空间问题 (xmlns)。您是否在属性中的任何位置使用 xmlns。如果是,请删除它并查看它是否有效
  • ImageMediaClass 在哪里?
  • 嘿约翰,你的问题解决了吗?
  • 感谢两位的回答。关于“TimeLineMediaClass”的拼写错误和缺少的“ImageMediaClass”,这是因为我手动输入了它们,因为我没有将它们包含在复制粘贴中。我在上面做了适当的更正。抱歉回复晚了,我有点忙。
  • 关于 Dipesh Bhatt 的 xmlns 建议,我们不使用此功能。

标签: c# .net wpf xml serialization


【解决方案1】:

你需要用

装饰你的MediaClass
[XmlInclude(typeof(TimeLineMediaClass))]

在上面的示例中,TimelineMediaClass 的大小写错误,这意味着该示例无法为我编译。如果您删除它,或者如果您确实有一个具有此名称的不同类,您将收到您描述的错误。

一旦您更正了大小写,它应该可以工作 - 它对我有用 [注意我还必须删除 ImageMediaClass 的属性,该属性在您的示例中也不存在]。

【讨论】:

    【解决方案2】:

    我复制您的代码,然后运行删除 [XmlInclude(typeof(ImageMediaClass))] 并更正此属性:[XmlInclude(typeof(TimelineMediaClass))][XmlInclude(typeof(TimeLineMediaClass))]。现在,运行您的代码,一切正常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-27
      • 1970-01-01
      • 2011-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-03
      • 2011-07-24
      相关资源
      最近更新 更多