【问题标题】:XmlSerializer throwing exception with generic list during serializationXmlSerializer 在序列化期间使用通用列表抛出异常
【发布时间】:2013-10-18 15:16:52
【问题描述】:

我正在尝试将一个相当简单的类序列化(然后反序列化)为 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() { }
}

【问题讨论】:

  • 我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。
  • 您在哪一行得到该异常,请发布整个异常。使用ex.ToString()。 XML Serializer 的内部异常通常包含很多细节。
  • 注意:您的代码示例中的所有 XmlXxx 属性都是不必要的,XmlSerializer ctor 的额外类型规范也不是必需的。
  • 我在没有所有 XMLxxx 属性的情况下遇到了类似的异常,并添加了它们以尝试解决它(根据此 link
  • 至于更多的异常细节——实际上并没有更多的,实际上来自内部异常。父异常没有帮助(“生成 XML 文档时出错”)。它失败的那一行是对 Serialize 方法的实际调用。

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


【解决方案1】:

您的 Class Model 和 Searalizable 数据有误。

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

我知道这是一个很晚的答案。只是想确保问题已得到解答。也许它会帮助将来的人。 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多