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

时间:2014-04-20 13:52:46

标签: c# json json.net

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

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

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

(很遗憾,我无法更改JSON格式。)

4 个答案:

答案 0 :(得分:16)

使用JsonProperty属性指示JSON中的名称。 e.g。

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

答案 1 :(得分:0)

不确定为什么,但这对我不起作用。在这个例子中,我每次都只为“BindingType”返回一个null。实际上,我发现将Json结果作为字符串下载然后执行以下操作会更容易:

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

您可以在反序列化之前执行此操作。

还有一点点文字。虽然这在我的例子中起作用,但在某些情况下可能没有。例如,如果“绑定类型”不仅是字段名称而且是一段数据,则此方法将更改它以及可能不合适的字段名称。

答案 2 :(得分:0)

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

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

别忘了包含using Newtonsoft.Json;

答案 3 :(得分:0)

System.Text.Json

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

[JsonPropertyName(".net version")]
public string DotNetVersion { get; set; }

以下示例:

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