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