2011-10-26 36 views
0

我试图序列化从Solr的以JSON响应的JSON响应:反序列化需要一个字典,而是得到一个列表

这是JSON:

"facet_counts": { 
"facet_queries": {}, 
"facet_fields": {"attraction":  [ 
    "Cape Winelands", 
    2, 
    "Col de Bonhomme", 
    2, 
    "Elephanta Caves", 
    2, 
    "Kruger National Park", 
    2, 
    "Manuel Antonio Park", 
    2, 
    "San Francisco Monastery", 
    2, 
    "Tafraoute", 

在XML中,这将是:

<lst name="facet_counts"> 
     <lst name="facet_queries"/> 
      <lst name="facet_fields"> 
       <lst name="attraction"> 
       <int name="Cape Winelands">2</int> 
       <int name="Col de Bonhomme">2</int> 
       <int name="Elephanta Caves">2</int> 
       <int name="Kruger National Park">2</int> 

如何反序列化JSON作为字典?

的问题是,结果被格式化为“普酒乡”,2,而不是“普酒乡”:2

这是Solr的方式返回它,我没有过对照和希望使用JSON而不是XML。

任何人都知道如何做到这一点?或者碰到过这个?

+1

你有没有考虑过使用SolrNet? –

回答

0
var data = { 
    "facet_counts": { 
     "facet_queries": {}, 
     "facet_fields": { 
      "attraction": [ 
       "Cape Winelands", 
       2, 
       "Col de Bonhomme", 
       2, 
       "Elephanta Caves", 
       2, 
       "Kruger National Park", 
       2, 
       "Manuel Antonio Park", 
       2, 
       "San Francisco Monastery", 
       2 
      ] 
     } 
    } 
}; 

function arr_to_dict(a) { 
    var o = {}, i, len, p; 
    for (i = 0, len = a.length; i < len; i +=1) { 
     p = i%2?o[p]=a[i]:a[i]; 
    } 
    return o; 
} 

arr_to_dict(data.facet_counts.facet_fields.attraction); 
+0

是的,我可以手动解析它。我想知道是否有一种方法可以让C#反序列化中的System.Web.Script.Serialization.JavaScriptSerializer正确地为我做。我很好奇,如果这个JSON格式是来自solr的错误还是应该这样。 – rksprst

+0

您可以编写一个从JavaScriptConverter继承的类,该类实现Serialize和Deserialize方法,并且基本上处理Deserialize方法中的Array to Dictionary转换。然后,当您创建JavaScriptSerializer对象时,可以添加转换器以便知道如何将构面转换为字典。 – dhysong

0

严格地说,关于Solr,您可以在请求参数中指定json.nl = map,这将根据需要返回名称值对中的构面。

相关问题