Azure函数 - 如何在配置文件中插入数组

时间:2017-07-09 15:21:51

标签: c# arrays json azure

我使用local.settings.json文件存储我的Azure功能的应用程序设置,如建议的Loaders Android Performance。我可以在以下示例中访问应用程序设置的值

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "",
    "AzureWebJobsDashboard": ""
  },
  "ConnectionStrings": {
    "SQLConnectionString": "myConnectionString"
  }
}

使用ConfigurationManager.ApplicationSettings["someValue"]或使用ConfigurationManager.ConnectionStrings["SQLConnectionString"]的连接字符串。 但是,当我尝试将数组作为值之一插入时:

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "",
    "AzureWebJobsDashboard": "",
    "myArray": [
      {
        "key1": "value1",
        "key2": "value2"
      },
      {
        "key1": "value3",
        "key2": "value4"
      }
    ]
  },
  "ConnectionStrings": {
    "SQLConnectionString": "myConnectionString"
  }
}

我开始获得异常(例如,当我尝试访问连接字符串时)。所以我的猜测是我没有使用正确的阵列格式。 可以在local.settings.json文件中使用数组吗?如果他们可以,那么正确的格式是什么?

1 个答案:

答案 0 :(得分:0)

根据azure函数源代码Azure.Functions.Cli/Common/SecretsManager.cs,你会发现它有一个AppSettingsFile类,用于从local.settings.json文件中读取设置。

AppSettingsFile类的某些部分:

null

根据代码,它使用JsonConvert.DeserializeObject方法将json文件转换为appSettings对象。

但appSettings.Values属性是目录类型,它不支持数组。所以我不建议您使用数组作为其设置。

我建议你可以尝试将数组转换为两个字符串值。这样做会很好。

像这样:

        public AppSettingsFile(string filePath)
        {
            _filePath = filePath;
            try
            {
                var content = FileSystemHelpers.ReadAllTextFromFile(_filePath);
                var appSettings = JsonConvert.DeserializeObject<AppSettingsFile>(content);
                IsEncrypted = appSettings.IsEncrypted;
                Values = appSettings.Values;
                ConnectionStrings = appSettings.ConnectionStrings;
                Host = appSettings.Host;
            }
            catch
            {
                Values = new Dictionary<string, string>();
                ConnectionStrings = new Dictionary<string, string>();
                IsEncrypted = true;
            }
        }

        public bool IsEncrypted { get; set; }
        public Dictionary<string, string> Values { get; set; } = new Dictionary<string, string>();
        public Dictionary<string, string> ConnectionStrings { get; set; } = new Dictionary<string, string>();