2014-03-30 20 views
-1

我需要反序列化下面的响应:Json.Net反序列化的IDictionary <int,MyClass>

{ 
1: { 'a': 'anything', 'b': 987, ... }, 
2: { 'a': 'something', 'b': 123, ... } 
} 

我创造出所有属性映射在{ 'A' 一个MyClass的: '什么', 'B':987。 ..}并使用IDictionary尝试反序列化它。 Json.Net能够映射正确的键,但不幸的是,这个值是空的。

我无法控制json响应,所以我无法让Json.Net更容易。

我该怎么办?自定义转换器?

干杯, LD

+0

实际上它是Reshaper的重构。它使我的物业成为私人设置。在重构之后,我没有看到我的类定义。 – ldsenow

回答

0

这工作对我很好。下面是我在LinqPad跑代码:

void Main() 
{ 
    var json = @"{ 1: { 'a': 'anything', 'b': 987, }, 2: { 'a': 'something', 'b': 123, } }"; 
    JsonConvert.DeserializeObject<IDictionary<int, MyClass>>(json).Dump(); 
} 

// Define other methods and classes here 
class MyClass 
{ 
    public string A { get; set; } 
    public int B { get; set; } 
} 

转储打印:

Dictionary<Int32,MyClass> (2 items) 
Key Value 
1 MyClass4 
UserQuery+MyClass 
    A anything 
    B 987 

2 MyClass4 
UserQuery+MyClass 
    A something 
    B 123 
0

不清楚是什么问题。以下控制台应用程序工作得很好:

using Newtonsoft.Json; 
using System; 
using System.Collections.Generic; 

public class MyClass 
{ 
    public string A { get; set; } 
    public int B { get; set; } 
} 

static class Program 
{ 
    static void Main() 
    { 
     var json = @" 
     { 
      1: { ""a"": ""anything"", ""b"": 987 }, 
      2: { ""a"": ""something"", ""b"": 123 } 
     }"; 

     var result = JsonConvert.DeserializeObject<IDictionary<int, MyClass>>(json); 
     Console.WriteLine(result[2].A); 
    } 
}