2016-12-25 16 views
0

我收到来自第三方的一个JSON文档,当反序列化有以下格式同一列有串以及整数

period  key  value 
"2013-3"  0 5 
"2013-4"  1 6 
. 
. 
. 
"2013-10" 5 15 
"2013-11" mykey1 25 
"2013-12" mykey3 6 

在这个时候我尝试运行动态对象名单一个linq查询我得到一个错误.. System.FormatException:输入字符串不是在一个正确的格式。

此消失,如果我只保留字符串或键列诠释值..

任何帮助表示衷心感谢。

例LINQ查询::

data.Where(w => w.key == "mykey1").Select(s => s.value).ToArray(); 

例子:http://rextester.com/OMRG78541

+1

什么是您的linq查询? –

+0

用示例linq查询更新 – Arnab

+2

只要你的'key'属性是一个'string',而不是'int',那么有两种不同的“类型”的事实是无关紧要的。您提供的例外情况使其听起来像其他事情正在发生,但您尚未提供足够的信息。 – krillgar

回答

1

因为你使用动态的对象,你需要转换的关键,以验证您的lambda表达式的谓语。这是因为,即使使用的是动态底层对象是一个JValue其不会允许的字符串和JValue

data.Where(w => (string)w.key == "mykey1").Select(s => s.value).ToArray(); 

之间的==给出的样本代码

namespace Rextester 
{ 
    public class Program 
    { 
     public static void Main(string[] args) 
     { 
      var json = "[{\"period\":\"2013-3\",\"key\":1,\"val\":18148},{\"period\":\"2013-3\",\"key\":\"totalinteractions\",\"val\":95862},{\"period\":\"2013-3\",\"key\":\"totalusers\",\"val\":160389},{\"period\":\"2013-4\",\"key\":\">10\",\"val\":69915}]"; 
      var inputdata = JsonConvert.DeserializeObject<IEnumerable<dynamic>>(json); 
      var list = inputdata.Where(w => (string)w.key == "totalusers").Select(s => s.val).ToArray(); 
      foreach (var item in list) 
      { 
       Console.WriteLine(item); 
      } 
     } 
    } 
} 

的上面会输出导致

160389 
相关问题