You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中使用System.Text.Json反序列化含空键JSON的问题

问题原因与解决方案

问题根源

gdalinfo返回的JSON中,bands[x].metadata结构包含一个空字符串作为键的嵌套对象,这个对象里才是统计数据。而你定义的BandMetadata类中Statistics属性,默认会尝试匹配JSON里名为"Statistics"的键,自然找不到对应数据,所以反序列化后为null。

举个典型的gdalinfo返回JSON片段:

"bands": [
  {
    "metadata": {
      "": {
        "STATISTICS_MINIMUM": "10.2",
        "STATISTICS_MAXIMUM": "98.7",
        "STATISTICS_MEAN": "54.3",
        "STATISTICS_STDDEV": "12.1"
      }
    }
  }
]

解决方案

根据你使用的JSON序列化库,给BandMetadata的Statistics属性添加对应特性,指定空字符串作为映射键:

1. 使用System.Text.Json的情况

修改BandMetadata类:

using System.Text.Json.Serialization;

public class BandMetadata
{
    [JsonPropertyName("")] // 指定绑定空字符串键
    public BandStatistics Statistics { get; set; }
}

2. 使用Newtonsoft.Json(Json.NET)的情况

修改BandMetadata类:

using Newtonsoft.Json;

public class BandMetadata
{
    [JsonProperty("")] // 指定绑定空字符串键
    public BandStatistics Statistics { get; set; }
}

额外检查

同时要确保BandStatistics类的属性与JSON中的统计字段正确映射,比如:

// System.Text.Json示例
public class BandStatistics
{
    [JsonPropertyName("STATISTICS_MINIMUM")]
    public double Minimum { get; set; }

    [JsonPropertyName("STATISTICS_MAXIMUM")]
    public double Maximum { get; set; }

    [JsonPropertyName("STATISTICS_MEAN")]
    public double Mean { get; set; }

    [JsonPropertyName("STATISTICS_STDDEV")]
    public double StdDev { get; set; }
}

这样修改后,JsonSerializer.Deserialize<GdalInfo>(json)就能正确将空键下的统计数据解析到Statistics属性中。

内容的提问来源于stack exchange,提问作者Paul Meems

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 09:43:21