我正在编写一个读取JSON文件的工具。我正在使用NewtonSoft工具将JSOn反序列化为C#类。这是一个示例片段:
"name": "Fubar",
".NET version": "4.0",
"binding type": "HTTP",
字段名称包含C#标识符中无效的空格和其他字符(。)。 这样做的正确方法是什么?
(很遗憾,我无法更改JSON格式。)
答案 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
,则等效属性为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);