当字段名称包含空格时反序列化JSON

问题描述 投票:8回答:4

我正在编写一个读取JSON文件的工具。我正在使用NewtonSoft工具将JSOn反序列化为C#类。这是一个示例片段:

 "name": "Fubar",
 ".NET version": "4.0",
 "binding type": "HTTP",

字段名称包含空格和其他字符(。),这些字符在C#标识符中无效。正确的方法是什么?

(很遗憾,我没有更改JSON格式的选项。)

c# json json.net
4个回答
18
投票

使用JsonProperty属性在JSON中指示名称。例如

[JsonProperty(PropertyName = "binding type")]
public string BindingType { get; set; }

0
投票

不知道为什么,但是这对我不起作用。在这个例子中,我每次都只为“ BindingType”返回一个空值。实际上,我发现将Json结果下载为字符串然后执行类似的操作要容易得多:

  myString = myString.Replace(@"binding type", "BindingType")

您将在反序列化之前执行此步骤。

也少了一点点文字。虽然在我的示例中这有效,但在某些情况下可能不行。例如,如果“绑定类型”不仅是字段名称,而且是一条数据,则此方法将更改它以及字段名称,这可能是不希望的。


0
投票

如果要手动初始化Json,可以执行:

var jsonString = "{" +
            "'name': 'Fubar'," +
            "'.NET version': '4.0'," +
            "'binding type': 'HTTP'," +
            "}";
        var json = JsonConvert.DeserializeObject(jsonString);            
        return Ok(json);

不要忘记包含using Newtonsoft.Json;


0
投票

System.Text.Json

如果使用System.Text.Json,则等效属性为JsonPropertyName

JsonPropertyName

以下示例:

[JsonPropertyName(".net version")]
public string DotNetVersion { get; set; }
© www.soinside.com 2019 - 2024. All rights reserved.