1

かなり単純なクラスを 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() { }
}
4

1 に答える 1

0

クラス モデルと Searalizable データが間違っています。

TaskListFilterConfigは とは異なるタイプであることに注意してくださいextraTypesextraTypesには他のモデル データがあります。

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または、関連するモデル データも渡したい場合。

私はそれが非常に遅い答えであることを知っています。質問に答えていることを確認したいだけです。多分それは将来誰かを助けるでしょう。:)

于 2014-11-21T07:13:20.663 に答える