如何在Azure函数中的local.settings.json文件中设置数组值

mus*_*kan 3 c# azure

当我尝试将数组作为local.settings.json文件中的Values之一插入时:

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "",
    "AzureWebJobsDashboard": "",
    "myArray": [
      {
        "key1": "value1",
        "key2": "value2"
      },
      {
        "key1": "value3",
        "key2": "value4"
      }
    ]
  },
  "ConnectionStrings": {
    "SQLConnectionString": "myConnectionString"
  }
}
Run Code Online (Sandbox Code Playgroud)

我开始例外。可以在local.settings.json文件中使用数组吗?如果可以的话,正确的格式是什么?

小智 9

如果您尝试在 local.settings.json 文件/环境变量中设置数组,则可以指定以下格式:

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "FUNCTIONS_WORKER_RUNTIME": "dotnet",
    "MyArray:0:Name": "Test",
    "MyArray:1:Name": "Test2",
    "MyArray:2:Name": "Test3"
  }
}
Run Code Online (Sandbox Code Playgroud)

在 Startup.cs 中,您可以使用以下语法来绑定数组

var settings = new List<MyArrayType>();
configuration.GetSection("MyArray").Bind(settings);
Run Code Online (Sandbox Code Playgroud)

这是使用 .NET 6.0 和 Azure Functions v4 的示例


Uma*_*air 7

您需要使用数组索引器格式。

例如

"myArray:[0]:key1": "value1",
"myArray:[0]:key2": "value2",
"myArray:[1]:key1": "value3",
"myArray:[1]:key2": "value4"

Run Code Online (Sandbox Code Playgroud)


mus*_*kan 5

在local.settings.json文件中添加类似字符串的数组:

"myArray": "[
             {
               \"key1\": \"value1\",
               \"key2\": \"value2\"
             },
             {
               \"key1\": \"value3\",
               \"key2\": \"value4\"
             }
            ]"
Run Code Online (Sandbox Code Playgroud)

然后在您的代码中反序列化它,如下所示:

string value = Environment.GetEnvironmentVariable("myArray");

objList = JsonConvert.DeserializeObject<List<object>>(value);
Run Code Online (Sandbox Code Playgroud)


Nei*_*ilD 5

这是可能的!

我的本地设置文件如下所示:

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "UseDevelopmentStorage=true"
  },
  "CustomArray": [
    {
      "CustomProp1": "foo0",
      "CustomProp2": "bar0"
    },
    {
      "CustomProp1": "foo1",
      "CustomProp2": "bar1"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

我部署到 Azure 时的配置如下所示: Azure 功能设置屏幕截图

然后,为了在我的 Startup 中解析数组,我有这样的事情:

var settings = new List<CustomSetting>();
config.GetSection("CustomArray").Bind(settings);
Run Code Online (Sandbox Code Playgroud)

...这样CustomSetting的课程在哪里:

public class CustomSetting 
{
    public string CustomProp1 { get; set; }
    public string CustomProp2 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我使用的是Microsoft.Extensions.ConfigurationNuget 包的3.1.5版和Microsoft.NET.Sdk.FunctionsAzure Functions SDK 的3.0.7 版。

  • 这根本**不起作用**。如果指定的节在“local.settings.json”中的“Values”节点下不存在,“Configuration.GetSection(sectionName).Exists()”返回“false”,当然还尝试“Bind()”到不存在的部分不起作用。 (6认同)

Tom*_*SFT 3

local.settings.json 文件中可以使用数组吗?如果可以的话,正确的格式是什么?

local.settings.json 目前似乎不支持arrays 。

据我所知 Values 集合应该是一个Dictionary,如果它包含任何非字符串值,它将导致Azure函数无法从 local.settings.json 读取值

根据我的测试,如果包含它将返回null

 "myArray": [
      {
        "key1": "value1",
        "key2": "value2"
      },
      {
        "key1": "value3",
        "key2": "value4"
      }
    ]
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述