【问题标题】:Save a List<T> not serialisable to a file将不可序列化的 List<T> 保存到文件
【发布时间】:2013-04-02 09:25:55
【问题描述】:

我想在 WPF 应用程序上保存和恢复列数据网格的大小和顺序。 我将此数据存储在两个列表中:

List<DataGridColumn>
List<SortDescription>

DataGridColumn 和 SortDescription 是 MSDN 类不可序列化。 我想将这些列表保存在文件中(xml 或 txt...)

请问最简单的方法是什么?

最好的问候, 尼克斯

【问题讨论】:

    标签: c# wpf xml serialization datagrid


    【解决方案1】:

    我强烈建议您不要将其保存为 DataGridColumnSortDescription 的列表。

    相反,您应该创建自己的与技术无关的轻量级 POCO,并包含重新创建列布局所需的数据。因为这是您自己的数据对象,它可以以任何您喜欢的方式进行序列化,但更好的是它不直接绑定到 Microsoft DataGrid。这样,如果您更换了 Microsoft (WPF Extended Toolkit) 网格,那么您的列设置将很容易转移到您使用的新网格中。

    当您从存储数据对象的任何位置重新水化数据对象列表时,您可以简单地遍历列表,为每个数据对象创建一列,并设置适当的列值。

    【讨论】:

    • 所以最好只调整保存、宽度和显示索引?
    • @WalterFabioSimoni 没错。您可能还需要排序方向(无、asc、desc 等)、可见性(true/false)等。我以前去过那里,学到了很多困难的方法 :)
    【解决方案2】:

    将其存储为例如

    List<Tuple<string, ListSortDirection, int, etc.>> 
    

    其中 string 是列名,ListSortDirection 指定排序方向,int 是索引等。您可以轻松地序列化此类类型。

    【讨论】:

    • 有了这个,我什至需要创建一个可序列化的类?
    • 取决于您执行哪种序列化。如果您进行一些自定义序列化,则不需要新类。如果您使用 XmlSerializer,您将需要额外的类,您将在其中使用 XmlElement、XmlAttribute 等属性标记成员...
    • 我强烈建议您创建额外的类,其中包含您想要序列化的成员。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-09
    • 2021-03-12
    • 1970-01-01
    • 1970-01-01
    • 2012-08-23
    • 2011-09-28
    • 1970-01-01
    相关资源
    最近更新 更多