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

调用JsonConvert.DeserializeObject反序列化User类返回null该如何解决

问题原因及解决方案

核心问题1:User类定义错误

  • 字段名拼写错误:Verified属性对应的JsonProperty注解中属性名写错为verfied,JSON返回的实际字段名是verified,拼写不匹配导致字段无法映射。
  • 字段类型不匹配:JSON中verified字段是布尔值类型,你定义的Verified属性为string类型,类型不匹配会导致反序列化异常。

修正后的User类代码:

public class User
{
    [JsonProperty(PropertyName ="id")]
    public string Id { get; set;  }

    [JsonProperty(PropertyName = "username")]
    public string Username { get; set; }

    [JsonProperty(PropertyName = "email")]
    public string Email { get; set; }

    [JsonProperty(PropertyName = "discriminator")]
    public string Discriminator { get; set; }

    [JsonProperty(PropertyName ="phone")]
    public string Phone { get; set; }
    
    // 修正拼写和类型
    [JsonProperty(PropertyName ="verified")]
    public bool Verified { get; set; }
}

核心问题2:变量作用域与返回值问题

你在FetchAccountInformation方法中反序列化得到的user是方法内的局部变量,没有将结果返回给调用方。而Main方法中你手动new了一个空的User对象,没有接收反序列化的结果,自然输出为空。

修正步骤:

  1. 修改FetchAccountInformation方法的返回值类型为Task<User>,反序列化成功后返回结果:
public async Task<User> FetchAccountInformation()
{
    // 原有请求逻辑
    if (responseHtml.IsSuccessStatusCode)
    {
        var json = await responseHtml.Content.ReadAsStringAsync();
        // 不需要UserWrapper,JSON根对象直接对应User结构
        return JsonConvert.DeserializeObject<User>(json);
    }
    return null;
}
  1. 修正Main方法的调用逻辑,接收返回结果:
static async Task Main(string[] args)
{
    Utilities utilities = new Utilities(); // 按实际情况实例化工具类
    Models.User user = await utilities.FetchAccountInformation();
    if(user != null)
    {
        Console.WriteLine(user.Username);
    }
}

核心问题3:不必要的包装类

你参考的回答对应的场景是JSON根对象嵌套了一层User字段,而你拿到的JSON根对象本身就是User结构,使用UserWrapper反而会因为结构不匹配导致反序列化失败,直接删除包装类即可。

通用排查方法

如果修改后还有问题可以按以下步骤排查:

  • 打印拿到的json字符串,确认返回结构和预期一致,没有外层嵌套、格式错误等问题
  • 反序列化时添加错误监听配置,输出具体的反序列化错误信息:
var settings = new JsonSerializerSettings
{
    Error = (sender, args) => 
    {
        Console.WriteLine(args.ErrorContext.Error.Message);
        args.ErrorContext.Handled = true;
    }
};
User user= JsonConvert.DeserializeObject<User>(json, settings);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 12:15:04