我正在编写一个读取JSON文件的工具。我正在使用NewtonSoft工具将JSOn反序列化为C#类。这是一个示例片段:
"name": "Fubar",
".NET version": "4.0",
"binding type": "HTTP",
字段名称包含空格和其他字符(。),这些字符在C#标识符中无效。正确的方法是什么?
(很遗憾,我没有更改JSON格式的选项。)
使用JsonProperty
属性在JSON中指示名称。例如
[JsonProperty(PropertyName = "binding type")]
public string BindingType { get; set; }
不知道为什么,但是这对我不起作用。在这个例子中,我每次都只为“ BindingType”返回一个空值。实际上,我发现将Json结果下载为字符串然后执行类似的操作要容易得多:
myString = myString.Replace(@"binding type", "BindingType")
您将在反序列化之前执行此步骤。
也少了一点点文字。虽然在我的示例中这有效,但在某些情况下可能不行。例如,如果“绑定类型”不仅是字段名称,而且是一条数据,则此方法将更改它以及字段名称,这可能是不希望的。
如果要手动初始化Json,可以执行:
var jsonString = "{" +
"'name': 'Fubar'," +
"'.NET version': '4.0'," +
"'binding type': 'HTTP'," +
"}";
var json = JsonConvert.DeserializeObject(jsonString);
return Ok(json);
不要忘记包含using Newtonsoft.Json;
如果使用System.Text.Json
,则等效属性为JsonPropertyName
:
JsonPropertyName
以下示例:
[JsonPropertyName(".net version")]
public string DotNetVersion { get; set; }