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

异步Post方法中Newtonsoft.Json自引用循环异常求助

解决异步Post方法中的Json循环引用异常

异常分析

你遇到的JsonSerializationException提示的循环引用路径StateMachine.<>t__builder,说明序列化的对象并非你显式处理的mappingHugeFilePayload,而是异步方法的状态机对象,这通常是某个环节意外引入了对状态机的引用,而非mappingHugeFilePayload本身存在循环引用。

具体解决方法

1. 移除冲突的Json配置

你当前同时启用了PreserveReferencesHandling.Objects和ReferenceLoopHandling.Ignore,这两个配置可能存在冲突。PreserveReferencesHandling会尝试保留对象引用,可能导致循环引用检测逻辑误触发。修改配置如下:

var settings = new JsonSerializerSettings
{
    ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
    // 移除PreserveReferencesHandling配置
};

2. 替换dynamic反序列化为强类型

使用dynamic反序列化可能会隐式引入不必要的对象引用,建议定义强类型的响应模型:

// 新增响应模型类
public class MappingApiResponse
{
    public int statuscode { get; set; }
    public string data { get; set; }
}

然后修改反序列化代码:

var data = await response.Content.ReadAsStringAsync();
var apiResponse = JsonConvert.DeserializeObject<MappingApiResponse>(data, settings);

// 后续逻辑改用apiResponse
if (apiResponse.statuscode == 200)
{
    string dataUrl = apiResponse.data;
    // ... 其余逻辑保持不变
}
else
{
    string error = apiResponse.data;
    throwMappingException = false;
    throw new Exception(error, new Exception(error));
}

3. 检查异常对象的引用

在catch块中抛出的BaseErrors/MapperErrors对象,确保没有引用TenantConfigModel或其他包含循环引用的对象(比如Tenant.AzureBlob)。只保留基本类型属性(如字符串、整数):

// 确保MapperErrors只包含值类型/字符串属性
public class MapperErrors : BaseErrors
{
    public int ErrorId { get; set; }
    public string ErrorDescription { get; set; }
    public string TransactionId { get; set; }
    public int TransactionSetId { get; set; }
}

4. 确认MappingHugeFilePayload的纯净性

检查MappingHugeFilePayload类的定义,确保它只包含基本类型属性,没有引用任何复杂对象(比如Tenant实例):

public class MappingHugeFilePayload
{
    public string SourceXMLUrl { get; set; }
    public string XSLTUrl { get; set; }
    public string TransactionId { get; set; }
    public int TenantId { get; set; } // 只存Tenant的ID,而非整个Tenant对象
    public string Environment { get; set; }
}

验证方案

按上述步骤修改后,重新运行代码,异常应该会被消除。如果仍存在问题,建议查看完整的异常栈跟踪,确认序列化触发的具体位置,进一步定位问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 18:50:19