2011-10-26 34 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,這將根據需要返回名稱值對中的構面。

相關問題