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);
}
}
实际上这是重塑者的重构。它使我的属性成为私有集。重构之后,我没有查看我的类定义。