我在將類序列化到XML時遇到問題。我創建了一個運行顯示錯誤的示例代碼。我想序列化名爲「ContentContainer」的類,ContentContainer有一個類型爲「ContentItemBase」的項目集合。因爲我的要求我執行這些類如下。但是如果實際序列化調用時代碼到達部分,則序列化器會拋出此異常:Xml序列化例外:不期望類型UserQuery + SpecificContentItem。使用XmlInclude或SoapInclude
不希望類型UserQuery + SpecificContentItem。使用 XmlInclude或SoapInclude屬性可以指定靜態爲非 的類型。
我已經搜索了這個問題,但我的要求我不能實現在異常消息中提到的XmlInclude方法。 有沒有解決方案(設計或實施提示)這個問題和類似的問題?
CODE:
void Main()
{
var item = new SpecificContentItem{ Name = "Test", Value = "TestValue" , SpecificField="TestField"};
var container = new ContentContainer();
container.Items.Add(item);
container.Name = "Test Container";
XmlSerializer ser= new XmlSerializer(typeof(ContentContainer));
StringWriter writer = new StringWriter();
ser.Serialize(writer, container);
string result = writer.ToString();
}
public abstract class ContentItemBase
{
public abstract string Name {get; set;}
public abstract string Value {get; set;}
}
public class SpecificContentItem: ContentItemBase
{
public string SpecificField {get; set;}
public override string Name {get; set;}
public override string Value {get; set;}
}
public class ContentContainer
{
public ContentContainer()
{
Items = new ContentItemCollection();
}
public string Name {get;set;}
public ContentItemCollection Items{get; set;}
}
public class ContentItemCollection : IEnumerable<ContentItemBase>
{
public SpecificContentItem SpecificItem { get; set; }
public IEnumerator<ContentItemBase> GetEnumerator()
{
if (SpecificItem != null)
yield return SpecificItem;
}
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
public void Add(Object obj)
{
if (obj is SpecificContentItem)
SpecificItem = (SpecificContentItem)obj;
}
}
呃。你不能使用XmlInclude的任何特定原因? – 2012-07-12 08:52:04
但是,嘿,使用LINQPad嘗試你的代碼的榮譽。實際上,很少有人會費心製作片段,以便在諸如此類的工具中正確描述他們的問題。 – 2012-07-12 09:02:52
謝謝!我試過「ContentContainer」類中的XmlInclude是否有任何方法在我的「ContentItemCollection」類中使用它? – 2012-07-12 09:36:00