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

使用JsonConvert.DeserializeObject反序列化JSON返回默认值问题

解决JsonConvert.DeserializeObject反序列化后属性全为默认值的问题

问题原因

你直接将整个JSON字符串反序列化成Current类,但JSON的根结构包含location和current两个顶级属性,Current类的字段和根对象的字段完全不匹配,导致Json.NET无法找到对应的数据,所以返回的对象属性都是默认值。

解决方案

方案1:创建匹配整个JSON结构的根对象类

定义包含顶级属性的根类,先反序列化成根对象,再提取Current数据:

// 定义完整的JSON结构类
public class RootObject
{
    public Location Location { get; set; }
    public Current Current { get; set; }
}

public class Location
{
    public string Name { get; set; }
}

public class Current
{
    public double Temp_c { get; set; }
    public double Cloud { get; set; }
}

// 反序列化代码
var root = JsonConvert.DeserializeObject<RootObject>(myJson);
var current = root.Current; // 此时current的Temp_c为5.0,Cloud为50

方案2:直接定位到JSON中的current节点再反序列化

使用JObject解析JSON,先提取current部分的字符串,再反序列化成Current类:

using Newtonsoft.Json.Linq;

var jsonObj = JObject.Parse(myJson);
var currentJson = jsonObj["current"].ToString();
var current = JsonConvert.DeserializeObject<Current>(currentJson);

额外提示(可选)

如果遇到属性名映射问题(比如大小写或命名风格差异),可以用JsonProperty特性显式指定JSON字段名:

public class Current
{
    [JsonProperty("temp_c")]
    public double Temp_c { get; set; }
    [JsonProperty("cloud")]
    public double Cloud { get; set; }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 15:25:19