Json.NET向后兼容性:编写新的属性名称,但要读取新属性或旧属性

时间:2016-06-22 07:15:04

标签: c# json serialization json.net

让我们假设我喜欢这个用于保存/加载设置的属性:

public Options RectangleCaptureOptions { get; set; }

我希望将属性名称更改为RegionCaptureOptions而不是RectangleCaptureOptions。但是,如果我更改了属性名称,那么Json .NET将无法找到它来反序列化。

此处接受的答案无效:

.NET NewtonSoft JSON deserialize map to a different property name

因为如果我使用JsonProperty

[JsonProperty("RectangleCaptureOptions")]
public Options RegionCaptureOptions { get; set; }

然后它还会将属性序列化为RectangleCaptureOptions,这是旧名称。

因此,当我更改变量或属性的名称时,仍希望在反序列化(此示例为RegionCaptureOptionsRectangleCaptureOptions时)支持旧名称,但在序列化时使用当前名称(RegionCaptureOptions )。这样,我可以在加载(反序列化)它们时为我的设置json文件提供向后兼容性支持。

我认为最干净的解决方案是制作自定义属性,例如JsonAlternativeName并使用它如下:

[JsonAlternativeName("RectangleCaptureOptions")]
public Options RegionCaptureOptions { get; set; }

可选择它可以有多个参数支持,这样你就可以添加多个替代名称。

但不确定如何完成它(或者根本不可能)并且无法在StackOverflow中找到类似的解决方案,因为在我发现的每个问题中,人们建议使用JsonProperty这对我的情况没有帮助。 / p>

0 个答案:

没有答案