如何将API响应的JSON数据反序列化为C#对象?
解决方案
1. 创建对应API返回JSON的实体类
根据返回的JSON结构,定义匹配的C#类,确保属性名和JSON字段大小写完全一致:
public class ApiResponse { public int Period { get; set; } public string ReadTime { get; set; } public double AKM { get; set; } public int AKM_Status { get; set; } public double CozunmusOksijen { get; set; } public int CozunmusOksijen_Status { get; set; } public double Debi { get; set; } public int Debi_Status { get; set; } public double KOi { get; set; } public int KOi_Status { get; set; } }
2. 修改sendData方法的泛型参数
把原方法中ResultStatus<object>替换为ResultStatus<ApiResponse>,让反序列化能识别具体类型:
public ResultStatus<ApiResponse> sendData(SendData data) { var res = PostData<ApiResponse>(this.stationType.ToString() + "/SendData", JsonConvert.SerializeObject(data)); return res; }
3. 兼容API返回的非标准JSON(单引号)
API返回的JSON使用单引号而非标准双引号,需要在反序列化时配置兼容选项。修改PostData方法中的反序列化代码:
private ResultStatus<T> PostData<T>(string url, string data) where T : new() { try { using (var webClient = new WebClient()) { webClient.Encoding = Encoding.UTF8; webClient.Headers.Add("AToken", JsonConvert.SerializeObject(new AToken { TicketId = this.TicketId.ToString() })); var resp = webClient.UploadString(this.Url + url, data); // 添加兼容配置 var jsonSettings = new JsonSerializerSettings { QuoteChar = '\'', // 允许解析单引号包裹的JSON DateFormatString = "yyyy-MM-dd HH:mm:ss" // 适配日期格式(注意原JSON中ReadTime格式存在错误,需确认API返回的正确格式) }; return JsonConvert.DeserializeObject<ResultStatus<T>>(resp, jsonSettings); } } catch (Exception ex) { return new ResultStatus<T> { message = ex.Message + System.Environment.NewLine + url }; } }
4. 主代码中访问反序列化后的属性
现在可以直接访问res.objects的具体属性,而不是调用ToString():
var res = Services.sendData(data); // 示例:输出具体属性值 MessageBox.Show($"周期:{res.objects.Period},AKM值:{res.objects.AKM}");
额外注意点
- 原JSON中的
ReadTime值格式错误(2022-08-22714:01:00),需确认API返回的正确日期格式,若格式固定,可调整DateFormatString参数适配。 - 确保
ResultStatus<T>类包含objects属性,结构参考如下(可根据实际API响应补充其他属性):
public class ResultStatus<T> { public T objects { get; set; } public string message { get; set; } // 可添加status、code等其他响应属性 }
内容的提问来源于stack exchange,提问作者Mert Atmaca
相关产品推荐
相关产品推荐

