【问题标题】:Can I preserve Dictionary<string, string> key casing when storing in Bot Framework ConversationData?在 Bot Framework ConversationData 中存储时,我可以保留 Dictionary<string, string> 键的大小写吗?
【发布时间】:2017-08-18 18:45:24
【问题描述】:

我有一个用例,我想在 Bot Framework 的 context.ConversationData 中存储一个 List&lt;string, string&gt;(通过 TableBotDataStore 类使用 Azure Table 存储作为后端)。但是,当我这样做时,在检索存储的列表时,键的大小写发生了变化。

例如,我存储一个这样的列表:

IDictionary<string, string> dict = new Dictionary<string, string>();
dict.Add("MyKey", "N");
context.ConversationData.SetValue("MyDictionary", dict);

然后我尝试在稍后的对话框中检索此数据:

IDictionary<string, string> dict;
context.ConversationData.TryGetValue("MyDictionary", out dict)
var found = dict.ContainsKey("MyKey");

但是,在本例中,found 设置为 false,因为 dict 实际上包含反序列化后的键/值对 {"myKey", "N"}。我可以通过简单地预先将我的密钥小写来解决这个问题,但是有什么方法可以配置ConversationData 的序列化/反序列化以保留大小写?

【问题讨论】:

    标签: c# serialization botframework


    【解决方案1】:

    我能够通过更改 JSON 格式化程序的配置方式来解决此问题。我更新了我的WebApiConfig.cs中的Register方法,如下:

    public static void Register(HttpConfiguration config)
    {
        // Json settings
        config.Formatters.JsonFormatter.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;
        config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver { NamingStrategy = new CamelCaseNamingStrategy { ProcessDictionaryKeys = false } };
        config.Formatters.JsonFormatter.SerializerSettings.Formatting = Formatting.Indented;
        JsonConvert.DefaultSettings = () => new JsonSerializerSettings()
        {
            ContractResolver = new CamelCasePropertyNamesContractResolver { NamingStrategy = new CamelCaseNamingStrategy { ProcessDictionaryKeys = false } },
            Formatting = Formatting.Indented,
            NullValueHandling = NullValueHandling.Ignore,
        };
    
    //...
    }
    

    现在,CamelCasePropertyNamesContractResolver 在从 Azure 表存储存储和检索用户的 ConversationData 时将保留字典键的大小写。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-29
      • 2012-09-21
      • 1970-01-01
      相关资源
      最近更新 更多