2012-03-06 68 views
0

我們目前正在使用.NET框架中的XmlSerializer開發一個應用程序。XmlSerialization不起作用

這是我們班的結構:

[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; } 
} 

不同類型的幾個媒體被添加到列表,這就是我們想要序列化。

這是串行器是如何實例化:

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

但是,當我們啓動該程序,並嘗試序列,拋出一個異常,指出「AudioMediaClass是沒有預料到」。

編輯:我提供的代碼中缺少一些東西。我在其中添加了一些更正;評論中有更多細節。

+0

這似乎是xml名稱空間問題(xmlns)。你在屬性中的任何地方使用xmlns嗎?如果是的話,刪除它,看看它是否工作 – 2012-03-06 14:48:08

+0

ImageMediaClass在哪裏? – 2012-03-06 14:54:53

+0

嘿約翰,你解決了你的問題? – 2012-03-06 19:07:06

回答

0

您需要

[XmlInclude(typeof(TimeLineMediaClass))] 

在您的例子來裝飾你的MediaClass類上面,你有錯誤的外殼上TimelineMediaClass這意味着樣本不會爲我編譯。如果你刪除它,或者如果你不同類與這個名字,你會得到你描述的錯誤。

一旦你改正了套管,它應該可以工作 - 它對我有用[注意我還必須刪除ImageMediaClass的屬性,這在你的示例中也不存在]。

0

我複製您的代碼,然後運行刪除[XmlInclude(typeof(ImageMediaClass))]並更正此屬性:[XmlInclude(typeof(TimelineMediaClass))][XmlInclude(typeof(TimeLineMediaClass))]。現在,運行你的代碼,它工作正常。