使用AWS默认C# Lambda模板测试JSON输入报反序列化错误如何解决
问题根因
你定义的Lambda处理函数FunctionHandler第一个入参为String类型,AWS Lambda默认的JSON序列化器会将传入的请求Payload直接反序列化为对应参数类型:
- 传入
"Hello World"时,Payload本身就是合法JSON字符串,可以正常反序列化为C# String类型,因此运行正常 - 你传入的AWS Hello World示例请求是JSON对象结构(以
{}包裹),序列化器无法将JSON对象直接转换为C# String类型,因此抛出反序列化错误,报错中Cannot get the value of a token type 'StartObject' as a string就是明确的指向。
解决方案
你可以根据业务需求二选一:
方案1:定义匹配JSON结构的实体类接收参数
按照你传入的JSON结构定义对应C#类,将函数入参类型改为该实体类即可。比如AWS默认Hello World请求结构为{"key1":"value1","key2":"value2","key3":"value3"},对应修改代码如下:
// 新增和JSON结构匹配的输入实体类 public class LambdaInput { public string Key1 { get; set; } public string Key2 { get; set; } public string Key3 { get; set; } } public class Function { public string FunctionHandler(LambdaInput input, ILambdaContext context) { // 按需处理输入的各个属性 return input?.Key1?.ToUpper(); } }
方案2:直接读取原始JSON字符串
如果需要拿到完整的原始JSON内容自行处理,可以将入参类型改为Stream手动读取:
public class Function { public string FunctionHandler(Stream input, ILambdaContext context) { using var reader = new StreamReader(input); // rawJson即为传入的完整原始JSON字符串 string rawJson = reader.ReadToEnd(); return rawJson?.ToUpper(); } }
内容的提问来源于stack exchange,提问作者Eric Snyder
相关产品推荐
相关产品推荐

