C# Json.Net反序列化IDictionary<;int,MyClass>;

C# Json.Net反序列化IDictionary<;int,MyClass>;,c#,json,json.net,deserialization,C#,Json,Json.net,Deserialization,我需要在下面反序列化一个响应: { 1: { 'a': 'anything', 'b': 987, ... }, 2: { 'a': 'something', 'b': 123, ... } } 我创建了一个MyClass,它映射{a':'anything','b':987,…}中的所有属性,并使用IDictionary尝试对其进行反序列化。Json.Net能够映射正确的键,但不幸的是,该值为空 我无法控制json响应,因此我无法使json.Net变得更容易 我怎么做?自定义转换器 干杯, 这

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

{
1: { 'a': 'anything', 'b': 987, ... },
2: { 'a': 'something', 'b': 123, ... }
}
我创建了一个MyClass,它映射{a':'anything','b':987,…}中的所有属性,并使用IDictionary尝试对其进行反序列化。Json.Net能够映射正确的键,但不幸的是,该值为空

我无法控制json响应,因此我无法使json.Net变得更容易

我怎么做?自定义转换器

干杯,
这对我来说很好。以下是我在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; }
}
void Main()
{
var json=@“{1:{'a':'anything',b':987,},2:{'a':'something',b':123,}”;
JsonConvert.DeserializeObject(json.Dump();
}
//在此处定义其他方法和类
类MyClass
{
公共字符串A{get;set;}
公共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 
字典(2项)
关键值
1 MyClass4
UserQuery+MyClass
A什么都可以
B 987
2 MyClass4
UserQuery+MyClass
A什么
B 123

不清楚问题出在哪里。以下控制台应用程序工作正常:

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);
    }
}
使用Newtonsoft.Json;
使用制度;
使用System.Collections.Generic;
公共类MyClass
{
公共字符串A{get;set;}
公共int B{get;set;}
}
静态类程序
{
静态void Main()
{
var json=@”
{
1:{“a”:“任何东西”,“b”:987},
2:{“a”:“某物”,“b”:123}
}";
var result=JsonConvert.DeserializeObject(json);
Console.WriteLine(结果[2].A);
}
}

实际上这是重塑者的重构。它使我的属性成为私有集。重构之后,我没有查看我的类定义。