C#中JSON反序列化DeviceInfo对象失败的问题排查
System.Text.Json反序列化失败原因分析
核心问题:JSON字段类型与C#类属性类型不匹配
你的DeviceInfo类定义中,部分属性为数值类型:
public class DeviceInfo { public string? ip { get; set; } public string? deviceKey { get; set; } public long time { get; set; } // Int64数值类型 public string? version { get; set; } public int faceCount { get; set; } // Int32数值类型 public int personCount { get; set; } // Int32数值类型 }
但对应的JSON字符串里,time、faceCount、personCount的值均为字符串类型(被双引号包裹):
{ "ip": "192.168.0.146", "deviceKey": "A34CC830D348437A", "time": "1741375392869", // 字符串形式的数字 "version": "1.41.9.7", "faceCount": "0", // 字符串形式的数字 "personCount": "0" // 字符串形式的数字 }
反序列化失败的直接原因
System.Text.Json默认不支持字符串类型数字到数值类型的自动转换,当反序列化器尝试将JSON中的字符串token读取为long/int类型时,就会抛出类型不匹配的异常。错误日志里的关键提示:
Cannot get the value of a token type 'String' as a number.
直接点明问题:代码期望读取数值类型,但JSON提供的是字符串类型,两者类型不兼容导致转换失败。
内容的提问来源于stack exchange,提问作者jstuardo
相关产品推荐
相关产品推荐

