2015-05-23 142 views
2
{"facet_counts":{ 
    "facet_queries":{}, 
    "facet_fields":{}, 
    "facet_dates":{}, 
    "facet_ranges":{ 
    "createdat":{ 
     "counts":[ 
     "2015-05-17T00:00:00Z",155, 
     "2015-05-18T00:00:00Z",162, 
     "2015-05-19T00:00:00Z",200, 
     "2015-05-20T00:00:00Z",218, 
     "2015-05-21T00:00:00Z",181, 
     "2015-05-22T00:00:00Z",137], 
     "gap":"+1DAY", 
     "start":"2015-05-17T00:00:00Z", 
     "end":"2015-05-23T00:00:00Z"}}}} 

我想反序列化上述json到我的對象,但計數部分沒有得到反序列化。我的對象是反序列化JSON到c#對象

public class FacetCounts 
{ 
    public class Facet_Ranges 
    { 
     public class CreatedAt 
     { 
      public List<Counts> counts { get; set; } 
      public class Counts 
      { 
       public Dictionary<string, int> count { get; set; } 
      } 
     } 
     public CreatedAt createdat { get; set; } 
    } 
    public Facet_Ranges facet_ranges { get; set; } 
} 

我也嘗試刪除public Dictionary<string, int> count { get; set; }但仍然失敗。 我的反序列化代碼是

objObject = JsonConvert.DeserializeObject<FacetCounts>(json); 

任何幫助將不勝感激!

回答

1

JSON2CSHARP

public class Createdat 
{ 
    public List<object> counts { get; set; } 
    public string gap { get; set; } 
    public string start { get; set; } 
    public string end { get; set; } 
} 

這爲我工作

1

環繞與{}

"facet_counts":{ 
    "facet_queries":{}, 
    "facet_fields":{}, 
    "facet_dates":{}, 
    "facet_ranges":{ 
     "createdat":{ 
      "counts":[ 
       {"2015-05-17T00:00:00Z",155}, 
       {"2015-05-18T00:00:00Z",162}, 
       {"2015-05-19T00:00:00Z",200}, 
       {"2015-05-20T00:00:00Z",218}, 
       {"2015-05-21T00:00:00Z",181}, 
       {"2015-05-22T00:00:00Z",137}], 
     "gap":"+1DAY", 
     "start":"2015-05-17T00:00:00Z", 
     "end":"2015-05-23T00:00:00Z"}}} 
+0

但我從外部對象獲取json,如何修改它返回的方式? – Hitesh

+1

你不能,但你應該把它放在問題中。 – Steve

1

這不是有效的JSON以計數的每個項目 - 您的計數對象需要在大括號{}。

僅供參考 - 您也可以使用json2csharp.com自動生成反序列化的c-sharp對象,這也會突出顯示類似的問題。

+0

這是一個有效的JSON,你提到的網站,我把我的代碼放在那裏,它給了我輸出。感謝您的鏈接。 – Hitesh

3
public class FacetCounts 
{ 
    public class Facet_Ranges 
    { 
     public class CreatedAt 
     { 
      public List<string> counts 
      { 
       get 
       { 
       return Counts 
        .SelectMany(pair => new[]{pair.Key, pair.Value.ToString()}) 
        .ToList(); 
       } 
       set 
       { 
       var pairs = new Dictionary<string, int>(); 
       for (var i = 0; i < value.Length/2; ++i) 
       { 
        pairs[value[2*i]] = int.Parse(value[2*i+1]); 
       } 
       this.Counts = pairs; 
       } 
      } 

      [JsonIgnore] 
      public Dictionary<string, int> Counts {get;set;} 
     } 
     public CreatedAt createdat { get; set; } 
    } 
    public Facet_Ranges facet_ranges { get; set; } 
} 
+0

感謝您的努力伴侶,但我找到了一個更簡單的方法來做到這一點。 – Hitesh

3

您的JSON是無效的。 錯誤是周圍缺乏完整的JSON字符串{}

這裏是一個工作JSON字符串括號:

{ 
"facet_counts": { 
    "facet_queries": {}, 
    "facet_fields": {}, 
    "facet_dates": {}, 
    "facet_ranges": { 
     "createdat": { 
      "counts": [ 
       "2015-05-17T00:00:00Z", 
       155, 
       "2015-05-18T00:00:00Z", 
       162, 
       "2015-05-19T00:00:00Z", 
       200, 
       "2015-05-20T00:00:00Z", 
       218, 
       "2015-05-21T00:00:00Z", 
       181, 
       "2015-05-22T00:00:00Z", 
       137 
      ], 
      "gap": "+1DAY", 
      "start": "2015-05-17T00:00:00Z", 
      "end": "2015-05-23T00:00:00Z" 
      } 
     } 
    } 
} 

我用JSon Lint用於驗證您的JSON和固定錯誤的錯誤。
我不確定您的C#代碼是否正確反序列化您的JSon,因此我建議您使用例如JSon2CSharp爲了在C#中創建JSon對象。然後您可以修復變量名稱等

+0

顯然是我在吃早飯時做出的數百萬迴應。 –

+0

非常感謝您的努力伴侶,我在Json2Csharp上驗證了我的JSON,它給了我適當的輸出類。 – Hitesh

+0

太棒了!沒問題。 =) –