【问题标题】:Change List<SomeType> to Dictionary<string, SomeType> but maintain compatibility将 List<SomeType> 更改为 Dictionary<string, SomeType> 但保持兼容性
【发布时间】:2012-08-22 07:56:23
【问题描述】:

我们在生产中有以下代码,它被用于 JSON 序列化/反序列化(硬盘驱动器上文件中 SomeType 的序列化列表):

public sealed class Cultures : List<Culture>
{
}

需求已经发生了变化,如果我们像Dictionary&lt;string, Culture&gt; 那样实现它,我们将受益匪浅,因为我们获得了键/值功能(Culture 类有一个 ID 类型为 string 的属性,它将用作键)。继续使用List,我们必须手动执行此操作。

进入 Cultures : Dictionary 的最佳(或唯一,如果有的话)方法是什么,但即使对于那些已经序列化了文化列表的文件,也能保持序列化工作?

【问题讨论】:

    标签: c# serialization dictionary


    【解决方案1】:

    更改属性并自定义序列化以支持旧格式。如果您使用的是 json.net,请使用 [JonConverter] 属性。

    【讨论】:

      【解决方案2】:

      您可以保留列表并使用 LINQ 添加转换器方法。

      public sealed class Cultures : List<Culture>
      {
        public Dictionary<string, Culture> ToDictionary()
        {
          return this.ToDictionary(_=>_.Id);
        }
      }
      

      【讨论】:

        【解决方案3】:

        在您的 Cultures 类上实现接口 IDictionary。您可以将其用作字典,但所有序列化都像以前一样工作。

        【讨论】:

          【解决方案4】:
          [CollectionDataContract]
          public sealed class Cultures : Dictionary<string, Culture>
          {
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-01-03
            • 2011-07-23
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多