Json.Net反序列化IDictionary <int,myclass> </int,myclass>

时间:2014-03-30 21:10:08

标签: c# json json.net deserialization

我需要在下面反序列化响应:

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

我创建了一个MyClass,用于映射{&#39; a&#39;:&#39;任何&#39;&#39; b&#39;:987,...}中的所有属性并使用IDictionary尝试反序列化它。 Json.Net能够映射正确的密钥,但遗憾的是该值为空。

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

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

干杯, LD

2 个答案:

答案 0 :(得分: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 

答案 1 :(得分: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);
    }
}