如何在Cosmos DB触发器函数中将CosmosJsonDotNetSerializer的MaxDepth设为128
解决JSON读取MaxDepth超出64的问题:提升至128的方案
针对你遇到的变更源处理器委托抛出的「读取器的MaxDepth(64)已超出」异常,以下是两种主流JSON处理库的MaxDepth提升方案,无需修改负载结构:
Newtonsoft.Json(Json.NET)场景
单次序列化/反序列化配置
在调用反序列化方法时,传入自定义的JsonSerializerSettings并设置MaxDepth为128:
var jsonSettings = new JsonSerializerSettings { MaxDepth = 128 }; var targetObject = JsonConvert.DeserializeObject<YourTargetModel>(yourJsonString, jsonSettings);
ASP.NET Web API全局配置
如果是在Web API项目中需要全局生效,在配置类中修改JSON格式化器的设置:
public static void Register(HttpConfiguration config) { config.Formatters.JsonFormatter.SerializerSettings.MaxDepth = 128; }
System.Text.Json场景
单次序列化/反序列化配置
使用JsonSerializerOptions指定MaxDepth参数:
var jsonOptions = new JsonSerializerOptions { MaxDepth = 128 }; var targetObject = JsonSerializer.Deserialize<YourTargetModel>(yourJsonString, jsonOptions);
ASP.NET Core全局配置
在Program.cs中为控制器添加JSON选项配置,全局生效:
builder.Services.AddControllers() .AddJsonOptions(options => { options.JsonSerializerOptions.MaxDepth = 128; });
变更源处理器特殊注意事项
如果你的变更源处理器使用了内部封装的JSON序列化器,需要确保将上述MaxDepth配置传递给处理器使用的序列化实例。例如部分事件处理框架会允许传入自定义序列化配置,直接注入设置好MaxDepth的配置对象即可。
复现问题的示例文档:
{"id": "foo", "a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
内容的提问来源于stack exchange,提问作者MITI SHAH
相关产品推荐
相关产品推荐

