c# - 使用属性名称中的特殊字符反序列化 JSON

标签 c# json json.net

我有一个像“A\/B”这样的 json 属性,我想在 C# 属性 AB 中反序列化它

我已经尝试过 System.Text.Json 和

[JsonPropertyName(@"A\/B")]
public bool AB { get; set; }

或者

[JsonProperty(@"A\/B")]
public bool AB { get; set; }

或者

[JsonProperty(PropertyName = (@"A\/B")]
public bool AB { get; set; }

[JsonPropertyName("A\\/B")]
public bool? AB { get; set; }

但未正确反序列化始终为 false,在 json 文件中为 true,如 "A/B": true,。

Json 示例:

{
    "List": [
        {
            "Name": "name",
            "A\/B": true,
        },
        {
            "Name": "name1",
            "A\/B": false,
        }
    ]
        
}

任何建议都将受到高度赞赏。

最佳答案

如果 JSON 看起来像这样

{
    "A\/B": true
}

那么属性的名称实际上只是 A/B

反斜杠字符还充当 JSON 语法中的转义字符,因此反斜杠实际上并不是属性名称的一部分。尽管在这种情况下正斜杠不需要任何转义,但转义它仍然是可以接受的。请参阅RFC 8259 section 7 .

因此,在您的 C# 代码中,您也不需要任何反斜杠:

[JsonProperty("A/B")]

[JsonPropertyName("A/B")]

取决于您使用的是 Json.NET 还是 System.Text.Json。

关于c# - 使用属性名称中的特殊字符反序列化 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75371314/

相关文章:

c# - 在 Json.Net c# 中获取数据

c# - Mono:找不到类型或命名空间名称 'HashSet'

c# - JavaScript 或 C#

c# - 带有变量名歧义的奇怪 C# 编译器问题

c# - 验证客户端下拉列表中选定月份和年份的选定日期

java - 在 jsonpath 中如何为嵌套 json 对象添加新值?

javascript - 查找反转数组的原始索引

ios - 无法将类型 '__NSArrayI' (0x10df73c08) 的值转换为 'NSDictionary' (0x10df74108)

c# - 使用 "random"键反序列化 JSON

c# - .NET 是否具有与 XML 的 Json.NET 类型功能等效的功能?