2017-07-18 38 views
-1

我试图从一个timex键来的LUIS响应中获取日期,但我只能设法进入列表并无法将其转换回字典。 有没有办法达到键值对。LUIS Timex日期

private const string EntityCustomerID = "CustomerID"; 
private const string EntityDateOfBirth = "builtin.datetimeV2.date"; 
private const string EntityNumber = "builtin.number"; 
private const string DateKeyName = "timex"; 
private const string ResolutionKeyName = "values"; 




public async Task Verification(IDialogContext context, IAwaitable<IMessageActivity> activity, LuisResult result) 
     { 
      var message = ""; 
      EntityRecommendation customerIdEntityRecommendation; 
      EntityRecommendation customerDobEntityRecommendation; 

      if(result.TryFindEntity(EntityCustomerID, out customerIdEntityRecommendation)) 
      { 
       message = $"Your customer ID is '{customerIdEntityRecommendation.Entity}'"; 
      } 

      if (result.TryFindEntity(EntityDateOfBirth, out customerDobEntityRecommendation)) 
      { 
       object dateObject; 

       if (customerDobEntityRecommendation.Resolution.TryGetValue(ResolutionKeyName, out dateObject)) 
       { 

        IEnumerable enumerable = dateObject as IEnumerable; 
        if(enumerable != null) 
        { 

         foreach (object element in enumerable) 
         { 

         } 
        } 
        //string dateString = (string)dateObject; 
        //string dateTransformed = DateTime.ParseExact(dateString, "yyyy-MM-dd", null).ToString("MM/dd/yyyy"); 
        //message = dateTransformed; 

       } 
      } 
      await context.PostAsync(message); 
      context.Wait(MessageReceived); 
     } 

编辑1:我找到了一种通过使用下面的代码

foreach (object element in enumerable) 
{ 
var jObject = (JObject)element; 
var dict = jObject.ToObject<Dictionary<string, object>>(); 
var timexValue = dict[DateKeyName]; 
} 
+0

标记时,请小心,这显然是C#语法(改变了它你) –

+0

@FelixPalmen我几乎可以发誓,我已经选择了C#,它可能是一个诚实的人的错误。感谢您纠正。 – user6083088

+0

这是你在找什么=> https://github.com/Microsoft/BotBuilder/pull/2964? –

回答

2

对此问题进行修复正在讨论here得到的日期。与此同时,您可以尝试重新使用fix的代码。喜欢的东西:

var children = myArray.Children(); 

if (children.Count() == 1) 
{ 
     return children.First().ToObject<IDictionary<string, object>>(); 
} 
else if (children.Count() > 0) 
{ 
     return children.Select(c => c.ToObject<IDictionary<string, object>>()).ToList(); 
} 
+0

我会尽我所能。我不确定重新调整目的是什么意思。我对C#非常陌生# – user6083088

+1

以修复程序的代码并使其适用于您的方案。 –

+0

如何更新代码,是不是锁定在DLL中 - 我在这里错过了什么? – user6083088