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

调用REST API时自定义类型接收JSON参数为null的问题求助

问题解决:自定义结构体接收请求体时URL字段为null的原因与修复

问题根源

你遇到的核心问题是客户端发送的请求体是JSON字符串类型,而非直接的JSON对象。客户端实际发送的内容是被引号包裹的字符串:

"{\"URL\":\"https://www.example.com/s/otherdetail\"}"

这个内容本质是一个字符串,内部才是目标JSON对象结构。而自定义的URLpacket结构体期望直接接收JSON对象(即{"URL":"xxx"}),序列化器无法将字符串映射到结构体结构,导致URL字段为null;又因为请求体本身是合法的JSON字符串,所以不会抛出错误。

修复方案

方案1:修正客户端发送的请求体(推荐)

直接发送原始JSON对象,不要将其包裹为字符串。正确的请求体内容应为:

{"URL":"https://www.example.com/s/otherdetail"}

修改后,原有的结构体接收代码即可正常工作,packet.URL会被正确赋值。

方案2:服务端适配客户端的发送格式(若客户端无法修改)

如果客户端无法调整发送内容,服务端可以先接收字符串,再手动反序列化为结构体:

public struct URLpacket {
    public string URL;
}

[HttpPost("UploadURL/{SpecID}/{DocType}")]
public ActionResult<string> UploadSpecsURL(int SpecID, string DocType, [FromBody] string jsonString) {
    var packet = System.Text.Json.JsonSerializer.Deserialize<URLpacket>(jsonString);
    // 后续处理逻辑
    return Ok(packet.URL);
}

或者继续使用JsonElement中转处理:

[HttpPost("UploadURL/{SpecID}/{DocType}")]
public ActionResult<string> UploadSpecsURL(int SpecID, string DocType, [FromBody] JsonElement body) {
    // 提取字符串内容并反序列化
    string innerJson = body.GetString();
    var packet = System.Text.Json.JsonSerializer.Deserialize<URLpacket>(innerJson);
    return Ok(packet.URL);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 06:25:17