如果无法使用 DataContractSerializer 反序列化密钥,则跳过字典条目
Skip Dictionary entry if key cannot be deserialized with DataContractSerializer
我目前正在序列化一个 class,其中包含这样的字典:
[DataMember]
public Dictionary<SomeEnum, SomeData<long>> SomeDictionary = new Dictionary<SomeEnum, SomeData<long>>();
这很好用,但将来我可能想从枚举中删除一个值。目前,如果删除枚举值,我将无法再反序列化数据。如果密钥无法反序列化,如何指示 DataContractSerializer 跳过字典条目?
更改枚举就是更改合同 - 这不是一个好的做法 (Change enum change contract)
如果您想继续,您必须实现自定义序列化(例如 Custom JSON Serialization of enum)并使用 .Net 类型 Enum
支持方法 IsDefined()
的事实。 .
enum myEnum { ev1, ev3 };
:
:
Console.WriteLine($"{Enum.IsDefined(typeof(myEnum), "ev1")} {Enum.IsDefined(typeof(myEnum), "ev2")}");
给予
True False
我目前正在序列化一个 class,其中包含这样的字典:
[DataMember]
public Dictionary<SomeEnum, SomeData<long>> SomeDictionary = new Dictionary<SomeEnum, SomeData<long>>();
这很好用,但将来我可能想从枚举中删除一个值。目前,如果删除枚举值,我将无法再反序列化数据。如果密钥无法反序列化,如何指示 DataContractSerializer 跳过字典条目?
更改枚举就是更改合同 - 这不是一个好的做法 (Change enum change contract)
如果您想继续,您必须实现自定义序列化(例如 Custom JSON Serialization of enum)并使用 .Net 类型 Enum
支持方法 IsDefined()
的事实。 .
enum myEnum { ev1, ev3 };
:
:
Console.WriteLine($"{Enum.IsDefined(typeof(myEnum), "ev1")} {Enum.IsDefined(typeof(myEnum), "ev2")}");
给予
True False