从 C# 中的 AWS Lambda 函数返回 JSON

Sim*_*ers 3 c# aws-lambda

问题:输出看起来像这样 [{\"FirstName\":\"William Smith\"}]"

问题:如何从用 C# 编写的 AWS Lambda 函数返回格式良好的 JSON 字符串?

细节:

  1. 我有一个用 C# 编写的 AWS Lambda 函数
  2. 返回类型是“字符串”
  3. 目的是将返回类型作为 JSON
  4. 这是 C# Lambda 函数被编码返回的内容:

    string TestJsonEvent = "[{\"FirstName\":\"William Smith\"}]"; 返回 TestJsonEvent;

Lambda 函数执行时;它返回:"[{\"FirstName\":\"William Smith\"}]"

  1. 即使这种变化也会返回相同的结果:

    string TestJsonEvent = @"[{""FirstName"":""William Smith""}]"; 返回 TestJsonEvent;

Dus*_*gen 8

Amazon 在他们的 C# 支持声明Lambda 函数处理程序文档中提供了示例。

相关位:

处理标准数据类型

下面列出的所有其他类型都要求您指定序列化程序。

  • 原始 .NET 类型(例如 string 或 int)。
  • 集合和映射 - IList、IEnumerable、IList、Array、IDictionary、IDictionary
  • POCO 类型(普通的旧 CLR 对象)
  • 预定义的 AWS 事件类型
  • 对于异步调用,Lambda 将忽略返回类型。在这种情况下,返回类型可以设置为 void。
  • 如果您使用 .NET 异步编程,则返回类型可以是 Task 和 Task 类型并使用 async 和 await 关键字。有关更多信息,请参阅在 C# 函数中使用 Async 和 AWS Lambda

除非您的函数输入和输出参数是 类型System.IO.Stream,否则您将需要序列化它们。AWS Lambda 提供了一个默认的序列化程序,可以在您的应用程序的程序集或方法级别应用,您也可以通过实现库ILambdaSerializer 提供的接口来定义自己的序列化程序Amazon.Lambda.Core

要将默认序列化程序属性添加到方法,首先添加对Amazon.Lambda.Serialization.Json[...]

安装Amazon.Lambda.Serialization.Json [1] NuGet 包并导入Amazon.Lambda.Serialization.Json命名空间的引用。

public class Sample
{
    [LambdaSerializer(typeof(Amazon.Lambda.Serialization.Json.JsonSerializer))]
    public object Test()
    {
        return new { FirstName = "William Smith" };
    }
}
Run Code Online (Sandbox Code Playgroud)

[1]:Github链接

  • 这个“文档”是一场灾难。“所有其他类型”——除了下面列出的类型之外?除了什么?您的示例会输出什么 JSON?如果我需要在属性名称中添加破折号(例如“Content-Type”)怎么办? (4认同)