2015-05-23 143 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

太棒了!没问题。 =) –