如果无法使用 DataContractSerializer 反序列化密钥,则跳过字典条目
Posted
技术标签:
【中文标题】如果无法使用 DataContractSerializer 反序列化密钥,则跳过字典条目【英文标题】:Skip Dictionary entry if key cannot be deserialized with DataContractSerializer 【发布时间】:2022-01-13 12:36:59 【问题描述】:我目前正在序列化一个包含这样的字典的类:
[DataMember]
public Dictionary<SomeEnum, SomeData<long>> SomeDictionary = new Dictionary<SomeEnum, SomeData<long>>();
这很好,但将来我可能想从枚举中删除一个值。目前,如果我删除枚举值,我将无法再反序列化数据。如果无法反序列化密钥,如何指示 DataContractSerializer 跳过字典条目?
【问题讨论】:
【参考方案1】:通过更改枚举,您正在更改合同 - 不是一个好习惯 (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
【讨论】:
以上是关于如果无法使用 DataContractSerializer 反序列化密钥,则跳过字典条目的主要内容,如果未能解决你的问题,请参考以下文章
如果没有GPS,则无法使用navigator.geolocation进行反应原生的当前位置
如果无法使用 Javascript/jQuery 加载视频,则隐藏视频容器
MirageJs:如果我通过直通调用 api,则无法使用 axios