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

添加数据库字段与ApiKey后,JSON反序列化ClubModel[]失败

问题解决:JSON反序列化ClubModel[]失败

问题原因

现在API返回的JSON结构已经不是直接的ClubModel数组,而是被包裹在一个包含statusCode、body、isBase64Encoded的外层对象中,且body字段的值本身是字符串形式的JSON数组(带转义引号)。你之前直接把整个响应反序列化为ClubModel[],自然会因为外层是对象而非数组报错。

解决方法

方法1:定义外层响应模型(推荐,类型安全)

先创建一个对应API外层响应的模型:

public class LambdaApiResponse
{
    [JsonPropertyName("statusCode")]
    public int StatusCode { get; set; }
    [JsonPropertyName("body")]
    public string Body { get; set; }
    [JsonPropertyName("isBase64Encoded")]
    public bool IsBase64Encoded { get; set; }
}

然后修改反序列化代码,分两步处理:

// 第一步:反序列化外层响应对象
var apiResponse = JsonSerializer.Deserialize<LambdaApiResponse>(content, serializerOptions);

// 第二步:从body字段中反序列化ClubModel数组
if (apiResponse != null && !string.IsNullOrWhiteSpace(apiResponse.Body))
{
    Clubs = JsonSerializer.Deserialize<ClubModel[]>(apiResponse.Body, serializerOptions);
}

方法2:用JsonDocument手动解析(无需额外模型)

如果不想新增模型,可以直接解析JSON节点提取body内容:

using var jsonDoc = JsonDocument.Parse(content);
var bodyContent = jsonDoc.RootElement.GetProperty("body").GetString();

if (!string.IsNullOrWhiteSpace(bodyContent))
{
    Clubs = JsonSerializer.Deserialize<ClubModel[]>(bodyContent, serializerOptions);
}

额外注意

如果后续isBase64Encoded变为true,需要先对body进行Base64解码再反序列化,示例代码:

if (apiResponse.IsBase64Encoded)
{
    var decodedBytes = Convert.FromBase64String(apiResponse.Body);
    bodyContent = Encoding.UTF8.GetString(decodedBytes);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 16:57:15