如何将含空格键名的JSON字符串反序列化为.NET对象?
解决JSON转.NET对象的键名匹配问题
你的问题核心是JSON键名包含空格,而C#类属性名无法直接使用带空格的命名,因此需要通过特性映射关联JSON键与类属性。以下是两种.NET常用JSON序列化库的解决方案:
方案1:使用System.Text.Json(.NET Core 3.0+ 内置)
先定义对应实体类,通过JsonPropertyName特性指定JSON中的键名:
using System.Text.Json.Serialization; public class Movie { [JsonPropertyName("movie title")] public string MovieTitle { get; set; } [JsonPropertyName("release date")] public DateTime ReleaseDate { get; set; } [JsonPropertyName("movie rating")] public double MovieRating { get; set; } [JsonPropertyName("main actor")] public MainActor MainActor { get; set; } public bool Seen { get; set; } } public class MainActor { public string Name { get; set; } public int Age { get; set; } public string Gender { get; set; } }
执行反序列化操作:
using System.Text.Json; string jsonString = "你的JSON字符串内容"; List<Movie> movies = JsonSerializer.Deserialize<List<Movie>>(jsonString);
方案2:使用Newtonsoft.Json(Json.NET,第三方库)
若项目使用Newtonsoft.Json,用JsonProperty特性完成映射:
using Newtonsoft.Json; public class Movie { [JsonProperty("movie title")] public string MovieTitle { get; set; } [JsonProperty("release date")] public DateTime ReleaseDate { get; set; } [JsonProperty("movie rating")] public double MovieRating { get; set; } [JsonProperty("main actor")] public MainActor MainActor { get; set; } public bool Seen { get; set; } } public class MainActor { public string Name { get; set; } public int Age { get; set; } public string Gender { get; set; } }
反序列化代码:
using Newtonsoft.Json; string jsonString = "你的JSON字符串内容"; List<Movie> movies = JsonConvert.DeserializeObject<List<Movie>>(jsonString);
注意事项
- System.Text.Json是.NET Core 3.0+内置组件,无需额外安装;Newtonsoft.Json需通过NuGet安装
Newtonsoft.Json包。 - JSON中的日期格式
"1999-03-31"可自动匹配C#的DateTime类型。 - JSON中的浮点数可直接映射到C#的
double类型。
内容的提问来源于stack exchange,提问作者kyeleswarapu
相关产品推荐
相关产品推荐

