更新时间:2025-08-14 GMT+08:00
分享

使用.NET Core CLI开发C#函数

C#新增json序列化和反序列化接口,并提供HC.Serverless.Function.Common.JsonSerializer.dll 。

提供的接口如下:

T Deserialize<T>(Stream ins):反序列化值传递到Function处理程序的对象中。

Stream Serialize<T>(T value):序列化值传递到返回的响应负载中。

本文以.NET Core 6.0创建“test”工程为例,其他运行时版本方法类似。执行环境已装有.NET SDK。

新建项目

  1. 创建目录“/tmp/csharp/projects /tmp/csharp/release” ,执行命令如下:
    mkdir -p  /tmp/csharp/projects;mkdir -p  /tmp/csharp/release
  2. 进入“/tmp/csharp/projects/”目录,执行命令如下:
    cd /tmp/csharp/projects/
  3. 新建工程文件 “test.csproj”,文件内容如下:
    <Project Sdk="Microsoft.NET.Sdk">
      <PropertyGroup>
        <TargetFramework>net6.0</TargetFramework>
        <RootNamespace>test</RootNamespace>
        <AssemblyName>test</AssemblyName>
      </PropertyGroup>
      <ItemGroup>
        <Reference Include="HC.Serverless.Function.Common">
          <HintPath>HC.Serverless.Function.Common.dll</HintPath>
        </Reference>
        <Reference Include="HC.Serverless.Function.Common.JsonSerializer">
          <HintPath> HC.Serverless.Function.Common.JsonSerializer.dll</HintPath>
        </Reference>
      </ItemGroup>
    </Project>

生成代码库

  1. 下载dll文件

    将HC.Serverless.Function.Common.dll、HC.Serverless.Function.Common.JsonSerializer.dll、Newtonsoft.Json.dll文件上传至目录“/tmp/csharp/projects/”。

  2. 在“/tmp/csharp/projects/”路径下,新建“Class1.cs”文件,代码内容如下:
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    using HC.Serverless.Function.Common;
    using System;
    using System.IO;
    
    namespace test
    {
        public class Class1
        {
            public Stream ContextHandlerSerializer(Stream input, IFunctionContext context)
            {
                var logger = context.Logger;
                logger.Logf("CSharp runtime test(v1.0.2)");
                JsonSerializer test = new JsonSerializer();
                TestJson Testjson = test.Deserialize<TestJson>(input);
                if (Testjson != null)
                {
                    logger.Logf("json Deserialize KetTest={0}", Testjson.KetTest);
    
                }
                else
                {
                    return null;
                }
    
              return test.Serialize<TestJson>(Testjson);
            }
    
            public class TestJson
            {
                public string KetTest { get; set; }//定义序列化的类中的属性为KetTest
    
            }
        }
    }
    
  3. 执行以下命令,生成代码库:
    dotnet build /tmp/csharp/projects/test.csproj -c Release -o /tmp/csharp/release

    dotnet的路径:/home/tools/dotnetcore-sdk/dotnet-sdk-2.1.302-linux-x64/dotnet。

  4. 执行以下命令,进入“/tmp/csharp/release”路径。
    cd /tmp/csharp/release 
  5. 在路径“/tmp/csharp/release”下查看编译生成的dll文件,如下所示:
    -rw-r--r-- 1 root root 468480 Jan 21 16:40 Newtonsoft.Json.dll
    -rw-r--r-- 1 root root   5120 Jan 21 16:40 HC.Serverless.Function.Common.JsonSerializer.dll
    -rw-r--r-- 1 root root   5120 Jan 21 16:40 HC.Serverless.Function.Common.dll
    -rw-r--r-- 1 root root    232 Jan 21 17:10 test.pdb
    -rw-r--r-- 1 root root   3584 Jan 21 17:10 test.dll
    -rw-r--r-- 1 root root   1659 Jan 21 17:10 test.deps.json
  6. 在“/tmp/csharp/release”路径下,新建文件“test.runtimeconfig.json”文件,文件内容如下:
    {
        "runtimeOptions": {
            "framework": {
                "name": "Microsoft.NETCore.App",
                "version": "6.0.0"
            }
        }
    }
  7. 在“/tmp/csharp/release”路径下,执行如下命令,打包test.zip代码库压缩包。
    zip -r test.zip ./*

测试示例

  1. 在FunctionGraph控制台新建一个C#(.NET 6.0)空白事件函数,上传打包好的“test.zip”压缩包,如图1所示。
    图1 上传代码包
  2. 配置一个测试事件。如图2所示。其中的key必须设置为“KetTest”,value可以自定义。(测试串必须为json格式。
    图2 配置测试事件

    KetTest:定义序列化的类中的属性为KetTest。

  3. 单击“测试”,查看测试执行结果。

相关文档