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