2013-10-10 87 views
1

我試圖序列化(並隨後反序列化)一個相當簡單的類到一個XML字符串,但得到一個異常:「類型System.Collections.Generic.List`1 [ [System.String,mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089]]可能不會在此上下文中使用。「XmlSerializer在序列化期間拋出異常與通用列表

我使用序列化的方法是:

public string ToXml(TaskListFilterConfig config) 
{ 
    Type[] extraTypes = { typeof(FilterConfig), typeof(SortConfig) }; 

    XmlSerializer serializer = new XmlSerializer(config.GetType(), extraTypes); 

    using (StringWriter writer = new StringWriter()) 
    { 
     serializer.Serialize(writer, config); 

     return writer.ToString(); 
    } 
} 

我試圖序列化類是:

[XmlRoot(ElementName = "TaskListFilterConfig", IsNullable = false)] 
[XmlInclude(typeof(FilterConfig))] 
[XmlInclude(typeof(SortConfig))] 
public class TaskListFilterConfig 
{ 
    [XmlArray("FilterConfigList")] 
    [XmlArrayItem("FilterConfig")] 
    public List<FilterConfig> FilterConfigList { get; set; } 

    [XmlArray("SortConfigList")] 
    [XmlArrayItem("SortConfig")] 
    public List<SortConfig> SortConfigList { get; set; } 

    public TaskListFilterConfig() 
    { 
     FilterConfigList = new List<FilterConfig>(); 
     SortConfigList = new List<SortConfig>(); 
    } 
} 


[XmlType("FilterConfig")] 
public class FilterConfig 
{ 

    public OperandType Operand { get; set; } 

    public int SelectedOperatorIndex { get; set; } 

    public int SelectedColumnIndex { get; set; } 

    public object RightOperand { get; set; } 

    public FilterConfig() { } 
} 

[XmlType("SortConfig")] 
public class SortConfig 
{ 
    public Infragistics.Windows.Controls.SortStatus SortDirection { get; set; } 

    public int ColumnSelectedIndex { get; set; } 

    public SortConfig() { } 
} 
+0

我編輯了你的標題。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 –

+1

您究竟在哪條線上獲得該例外,並請發佈_entire_例外。使用'ex.ToString()'。 XML Serializer的內部異常通常包含很多細節。 –

+1

注意:代碼示例中的所有XmlXxx屬性都是不必要的,並且XmlSerializer ctor的額外類型的規範也不是這樣。 –

回答

0

你的類模型和Searalizable數據是錯誤的。

請注意TaskListFilterConfig是與extraTypes不同的類型。 extraTypes有一些其他模型數據。

如果要序列TaskListFilterConfig類和數據:下面的代碼

public string ToXml(TaskListFilterConfig config) 
{ 
    XmlSerializer serializer = new XmlSerializer(typeOf(TaskListFilterConfig)); 
    using (StringWriter writer = new StringWriter()) 
    { 
     serializer.Serialize(writer, config); 
     return writer.ToString(); 
    } 
} 

使用或如果你想extraTypes通過培訓相關模型數據也是如此。

我知道這是一個非常晚的答案。只是想確定問題已經回答。也許它會幫助未來的某個人。 :)

相關問題