Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当字段名包含空格时反序列化JSON_C#_Json_Json.net - Fatal编程技术网

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

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

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

 "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);