JSON反序列化对象报错,求解决方案(附JSON及实体类代码)
解决JSON反序列化集合的问题
我来帮你搞定这个反序列化的问题~从你给出的信息来看,主要问题是缺少外层对象的类定义,另外还有一些细节可以优化,具体解决步骤如下:
1. 补全类结构
你只定义了datapoint类,但JSON里每个元素是包含target和datapoints的对象,序列化器需要对应的类来映射这些属性。同时建议把x的类型从int改成long——虽然当前的时间戳1523858700在int范围内,但Unix时间戳后续会超过int的最大值(2147483647,对应2038年),用long更稳妥。
如果你用的是Json.NET(Newtonsoft.Json):
using Newtonsoft.Json; // 对应JSON里的外层对象 public class MetricData { [JsonProperty("target")] public string Target { get; set; } [JsonProperty("datapoints")] public List<Datapoint> Datapoints { get; set; } } // 数据点类,补全完整定义 public class Datapoint { [JsonProperty("x")] public long X { get; set; } [JsonProperty("y")] public decimal Y { get; set; } }
如果你用的是.NET内置的System.Text.Json:
特性名称会不一样,调整如下:
using System.Text.Json.Serialization; public class MetricData { [JsonPropertyName("target")] public string Target { get; set; } [JsonPropertyName("datapoints")] public List<Datapoint> Datapoints { get; set; } } public class Datapoint { [JsonPropertyName("x")] public long X { get; set; } [JsonPropertyName("y")] public decimal Y { get; set; } }
2. 执行反序列化
有了完整的类结构后,就可以正常反序列化为集合了:
Json.NET版本:
string yourJson = @"[ { ""target"":""FDOL00001"", ""datapoints"":[ { ""y"":72.564, ""x"":1523858700 } ] }, { ""target"":""FDOL00001"", ""datapoints"":[ { ""y"":86.366, ""x"":1523858700 } ] }, { ""target"":""FDOL00001"", ""datapoints"":[ { ""y"":73.90195818815343, ""x"":1523858700 } ] } ]"; var metricCollection = JsonConvert.DeserializeObject<List<MetricData>>(yourJson);
System.Text.Json版本:
var metricCollection = System.Text.Json.JsonSerializer.Deserialize<List<MetricData>>(yourJson);
额外注意点
- 确保已经安装了对应的NuGet包:Json.NET需要安装
Newtonsoft.Json,System.Text.Json是.NET Core/.NET 5+内置的,无需额外安装。 - 如果一定要保留
x为int,要确认当前及未来的时间戳不会超出int的范围(-2147483648到2147483647),否则会抛出溢出异常。
内容的提问来源于stack exchange,提问作者Jyothish Bhaskaran
相关产品推荐
相关产品推荐

