XmlSerializer在序列化期间抛出具有泛型列表的异常

时间:2013-10-10 18:01:36

标签: c# .net xml serialization xml-serialization

我正在尝试将一个相当简单的类序列化(并随后反序列化)为XML字符串,但我得到一个异常:“System.Collections.Generic.List`1类型[[System.String,mscorlib,Version] = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089]]可能不会在此上下文中使用。“

我用来序列化的方法是:

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() { }
}

1 个答案:

答案 0 :(得分:0)

您的班级模型和可分类数据是错误的。

请注意,TaskListFilterConfigextraTypes的类型不同。 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也传递相关的模型数据。

我知道这是一个非常晚的答案。只是想确保问题得到解答。也许它有助于未来的人。 :)