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

Json反序列化失败:无法将JSON字符串转为DataFieldUploadFile类型

问题分析与解决方案

错误原因

你遇到的JsonSerializationException是因为context.ActionArguments["data"]返回的本身就是一个JSON格式的字符串,而非可直接序列化的对象。当你执行JsonConvert.SerializeObject(data)时,会把这个JSON字符串再次转义(比如原JSON{"mid":"2"}会变成"{\"mid\":\"2\"}"),后续用这个转义后的字符串反序列化DataFieldUploadFile类型时,系统会识别到这是一个字符串而非对象结构,因此抛出转换错误。

修复代码

直接将data作为字符串反序列化即可,不需要额外的序列化步骤:

var data = context.ActionArguments["data"];

if (data == null)
{
    context.Result = new OkObjectResult(
        new ErrorResponseMessage() { 
            context = new ContextResponse(false, new List<string>() { APPID, HANDER_ERRORCODE.ERR_REQUEST_CONTENT.ToString(), "Request null" }, new ContextRequest("", ""), ResultConstants.ERROR_CODE_FAIL, "Request null") 
        });
    return;
}

try
{
    // 直接将data转为字符串后反序列化
    var jsonStr = data.ToString();
    data = JsonConvert.DeserializeObject<DataFieldUploadFile>(jsonStr);
}
catch (Exception ex)
{
    // 可添加异常日志或自定义错误返回逻辑
    context.Result = new OkObjectResult(
        new ErrorResponseMessage() { 
            context = new ContextResponse(false, new List<string>() { APPID, HANDER_ERRORCODE.ERR_REQUEST_CONTENT.ToString(), ex.Message }, new ContextRequest("", ""), ResultConstants.ERROR_CODE_FAIL, "JSON反序列化失败") 
        });
}

额外优化建议

  • 先判断data类型,确保是字符串后再执行反序列化,兼容其他可能的参数类型:
    if (data is string jsonStr)
    {
        data = JsonConvert.DeserializeObject<DataFieldUploadFile>(jsonStr);
    }
    else
    {
        // 处理data不是字符串的情况,直接序列化后反序列化对象
        data = JsonConvert.DeserializeObject<DataFieldUploadFile>(JsonConvert.SerializeObject(data));
    }
    
  • 如果是API接口场景,可直接在Action方法参数中声明DataFieldUploadFile data,让框架自动完成反序列化,无需手动操作ActionArguments。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 03:21:03