将List <sometype>更改为Dictionary <string,sometype =“”>但保持兼容性</string,> </sometype>

时间:2012-08-22 07:56:24

标签: c# serialization dictionary

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

public sealed class Cultures : List<Culture>
{
}

要求已经发生变化,如果我们将其实现为Dictionary<string, Culture>,我们会受益匪浅,因为我们获得了键/值功能(Culture类具有属性ID键入string,它将用作键。坚持List,我们必须手动执行此操作。

什么是最好的(或者只有,如果有的话)去文化的方式:词典,但是即使那些已经在其中序列化了文化列表的文件,仍然保持序列化工作?

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

[CollectionDataContract]
public sealed class Cultures : Dictionary<string, Culture>
{
}