C# System.Text.Json反序列化,其中有两个可能的属性名
是否可以将JSON反序列化为属性名可以是两个值之一的类 例如,这两个JSON都将反序列化为同一个属性:C# System.Text.Json反序列化,其中有两个可能的属性名,c#,system.text.json,C#,System.text.json,是否可以将JSON反序列化为属性名可以是两个值之一的类 例如,这两个JSON都将反序列化为同一个属性: var json1 = "{\"A\":5}"; var json2 = "{\"B\":5}"; 我想也许我可以使用JsonPropertyName属性两次 [JsonPropertyName("A")] [JsonPropertyName(&
var json1 = "{\"A\":5}";
var json2 = "{\"B\":5}";
我想也许我可以使用JsonPropertyName属性两次
[JsonPropertyName("A")]
[JsonPropertyName("B")]
public int SomeInt { get; set; }
这是不允许的
然后我想,如果反序列化程序找不到JsonPropertyName属性,它可能会查找实际的属性名
[JsonPropertyName("A")]
public int B { get; set; }
但这也不起作用。您可以有两个单独的属性,一个委托给另一个:
[JsonPropertyName("A")]
[Obsolete("Explain why here")]
public int A
{
get => B;
set => B = value;
}
[JsonPropertyName("B")]
public int B { get; set; }
缺点是在序列化时两者都会被写入。我原本以为可以对过时的属性使用JsonIgnoreAttribute
,但这会阻止它也被反序列化:(如果您只是将其用于解析,这并不坏,但是如果您也在序列化,这会让人不快
此外,如果您使用这两个属性解析JSON文件,那么最后一个将获胜,这可能并不理想。
这两个JSON都将反序列化为相同的属性
,它们不应该,您将a
作为属性,将B
作为属性。此外,还将使用自定义JsonConverter
您需要做的是。可以反序列化为具有a和B的类,然后使用所需的规则进行投影。如果两个键在同一个json中会发生什么情况?@Magnetron选择第一个匹配项:),如果值为0和5会发生什么?您如何知道您首先得到了0,并且应该忽略5,或者如果0是因为您没有得到任何值并且int不能为null?