C# 反序列化多维JSON字符串

C# 反序列化多维JSON字符串,c#,json,serialization,C#,Json,Serialization,我是新来的,所以请原谅在适当的提问程序中的任何失误 基本上,我正在尝试从Pearson Dictionary Web API反序列化json数组。以下是JSON(为了节省空间,我删除了一些多余的结果索引): { “地位”:200, “偏移量”:0, “限制”:10, “计数”:10, “总数”:47, “url”:“/v2/dictionaries/ldoce5/entries?headword=test”, “结果”:[ { “数据集”:[ “ldoce5”, “字典” ], “标题”:“测试

我是新来的,所以请原谅在适当的提问程序中的任何失误

基本上,我正在尝试从Pearson Dictionary Web API反序列化json数组。以下是JSON(为了节省空间,我删除了一些多余的
结果
索引):

{
“地位”:200,
“偏移量”:0,
“限制”:10,
“计数”:10,
“总数”:47,
“url”:“/v2/dictionaries/ldoce5/entries?headword=test”,
“结果”:[
{
“数据集”:[
“ldoce5”,
“字典”
],
“标题”:“测试”,
“homnum”:1,
“id”:“cqAFzDfHTM”,
“词类”:“名词”,
“发音”:[
{
“音频”:[
{
“朗”:“英国英语”,
“类型”:“发音”,
“url”:“/v2/dictionaries/assets/ldoce/gb_pron/brelasdetest.mp3”
},
{
“朗”:“美国英语”,
“类型”:“发音”,
“url”:“/v2/dictionaries/assets/ldoce/us\u pron/test1.mp3”
}
],
“ipa”:“测试”
}
],
“感觉”:[
{
“定义”:[
测量某人的技能、能力或知识的一组问题、练习或实践活动
],
“例子”:[
{
“音频”:[
{
“类型”:“示例”,
“url”:“/v2/dictionaries/assets/ldoce/exa_pron/p008-001626298.mp3”
}
],
“课文”:“你考试考得好吗?”
}
],
“gramatical_示例”:[
{
“例子”:[
{
“音频”:[
{
“类型”:“示例”,
“url”:“/v2/dictionaries/assets/ldoce/exa_pron/p008-000592041.mp3”
}
],
“课文”:“我们明天要考不规则动词。”
}
],
“模式”:“测试”
}
],
“路标”:“考试”
}
],
“url”:“/v2/字典/条目/cqAFzDfHTM”
}
]
}
下面是我用来反序列化上述内容的C代码:

类程序
{
静态void Main(字符串[]参数)
{
字符串word=“test”;
字符串sURL=”https://api.pearson.com:443/v2/dictionaries/ldoce5/entries?headword=“+字;
WebClient客户端=新的WebClient();
string full=client.DownloadString(sURL);
var final=JsonConvert.DeserializeObject(完整);
Console.WriteLine(final.results[0].senses.definition);
}
}
公共类词典
{
公共结果[]结果{get;set;}
}
公开课成绩
{
公共字符串\u语音的\u部分{get;set;}
公共感官{get;set;}
}
公众阶级意识
{
公共字符串定义{get;set;}
}
出于某种原因,我在尝试运行它时遇到了一个奇怪的错误:

无法将当前JSON数组(例如[1,2,3])反序列化为类型 “TestingJson.Senses”,因为该类型需要一个JSON对象(例如。 {“name”:“value”})以正确反序列化。要修复此错误 将JSON更改为JSON对象(例如{“name”:“value”})或更改 将类型反序列化为数组或实现集合的类型 接口(如ICollection、IList)类似列表,可以 从JSON数组反序列化。还可以添加JsonArrayAttribute 类型,以强制它从JSON数组反序列化。路径 “结果[0]。感官”,第1行,位置512


非常感谢您的帮助

如果您正在与定义良好的对象(即绝大多数API)交互,那么最好创建强类型对象,而不是动态或字典

在Visual Studio中,如果您转到
Edit>Paste Special>Paste JSON as class
,它将生成您需要的所有对象

public class Rootobject
{
    public int status { get; set; }
    public int offset { get; set; }
    public int limit { get; set; }
    public int count { get; set; }
    public int total { get; set; }
    public string url { get; set; }
    public Result[] results { get; set; }
}

public class Result
{
    public string[] datasets { get; set; }
    public string headword { get; set; }
    public int homnum { get; set; }
    public string id { get; set; }
    public string part_of_speech { get; set; }
    public Pronunciation[] pronunciations { get; set; }
    public Sens[] senses { get; set; }
    public string url { get; set; }
}

public class Pronunciation
{
    public Audio[] audio { get; set; }
    public string ipa { get; set; }
}

public class Audio
{
    public string lang { get; set; }
    public string type { get; set; }
    public string url { get; set; }
}

public class Sens
{
    public string[] definition { get; set; }
    public Example[] examples { get; set; }
    public Gramatical_Examples[] gramatical_examples { get; set; }
    public string signpost { get; set; }
}

public class Example
{
    public Audio1[] audio { get; set; }
    public string text { get; set; }
}

public class Audio1
{
    public string type { get; set; }
    public string url { get; set; }
}

public class Gramatical_Examples
{
    public Example1[] examples { get; set; }
    public string pattern { get; set; }
}

public class Example1
{
    public Audio2[] audio { get; set; }
    public string text { get; set; }
}

public class Audio2
{
    public string type { get; set; }
    public string url { get; set; }
}

不要强迫它使用字典,让它创建自己的对象。
dictionary
是我创建的类,而不是.NET dictionary
Senses
是单数类型。
senses
JSON节点是复数(数组)。。你不能把一个复数形状的物体粘在一个单数形状的洞里。粘贴的好技巧。您是否可以更新以指示内支持的版本,以便在几年内这对一个好答案仍然具有上下文价值!非常感谢你的努力!是的,我在visual studio 2010上,没有“编辑>粘贴特别版”
,因此感谢您在上面粘贴它。lol:P不确定当它被引入时,我使用了VS2013,但是选中了VS2012,并且那个选项也存在。