2013-10-10 49 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通过培训相关模型数据也是如此。

我知道这是一个非常晚的答案。只是想确定问题已经回答。也许它会帮助未来的某个人。 :)

相关问题