Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 更改列表<;SomeType>;到字典<;字符串,SomeType>;但要保持兼容性_C#_Serialization_Dictionary - Fatal编程技术网

C# 更改列表<;SomeType>;到字典<;字符串,SomeType>;但要保持兼容性

C# 更改列表<;SomeType>;到字典<;字符串,SomeType>;但要保持兼容性,c#,serialization,dictionary,C#,Serialization,Dictionary,我们在生产中有以下代码,它用于JSON序列化/反序列化(硬盘上文件中某种类型的序列化列表): 公共密封类区域性:列表 { } 需求发生了变化,如果我们像Dictionary那样实现它,我们将从中受益匪浅,因为我们获得了键/值功能(Culture类具有类型为string的属性ID,该属性将用作键)。继续使用列表我们必须手动执行此操作 进入区域性的最佳(或唯一,如果有的话)方法是什么:字典,但即使那些文件中已经序列化了区域性列表,也要保持序列化工作?更改属性并自定义序列化以支持旧格式。如果您使用的

我们在生产中有以下代码,它用于JSON序列化/反序列化(硬盘上文件中某种类型的序列化列表):

公共密封类区域性:列表
{
}
需求发生了变化,如果我们像
Dictionary
那样实现它,我们将从中受益匪浅,因为我们获得了键/值功能(
Culture
类具有类型为
string
的属性
ID
,该属性将用作键)。继续使用
列表
我们必须手动执行此操作


进入区域性的最佳(或唯一,如果有的话)方法是什么:字典,但即使那些文件中已经序列化了区域性列表,也要保持序列化工作?

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

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

[CollectionDataContract]
[CollectionDataContract]
public sealed class Cultures : Dictionary<string, Culture>
{
}
公共封闭类文化:词典 { }
您可以保留列表并使用LINQ添加转换器方法

公共密封类区域性:列表
{
公共词典
{
返回此.ToDictionary(=>\uID);
}
}
[CollectionDataContract]
public sealed class Cultures : Dictionary<string, Culture>
{
}
public sealed class Cultures : List<Culture>
{
  public Dictionary<string, Culture> ToDictionary()
  {
    return this.ToDictionary(_=>_.Id);
  }
}