让我们假设我喜欢这个用于保存/加载设置的属性:
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
,这是旧名称。
因此,当我更改变量或属性的名称时,仍希望在反序列化(此示例为RegionCaptureOptions
或RectangleCaptureOptions
时)支持旧名称,但在序列化时使用当前名称(RegionCaptureOptions
)。这样,我可以在加载(反序列化)它们时为我的设置json文件提供向后兼容性支持。
我认为最干净的解决方案是制作自定义属性,例如JsonAlternativeName
并使用它如下:
[JsonAlternativeName("RectangleCaptureOptions")]
public Options RegionCaptureOptions { get; set; }
可选择它可以有多个参数支持,这样你就可以添加多个替代名称。
但不确定如何完成它(或者根本不可能)并且无法在StackOverflow中找到类似的解决方案,因为在我发现的每个问题中,人们建议使用JsonProperty
这对我的情况没有帮助。 / p>