JSON-锯齿数组反序列化



我确实有一个问题,这可能是初学者的问题,但我对JSON不是很熟悉。然而,我正在尝试使用C#Newtonsoft对下面的JSON进行反序列化。Json,然而,它一直在失败,有人能建议如何将其反序列化吗;它必须如何在C#中建模?

[
{
"fields": [
[
"name",
"value",
"values",
"error"
],
[
"correspondsApi",
"N",
null,
""
],
[
"username",
"test@test.com",
null,
""
],
[
"password",
"",
null,
""
],
[
"accountid",
"",
null,
""
],
[
"rememberMe",
"Y",
null,
""
],
[
"language",
"en-US",
null,
""
],
[
"S",
"tokenValue",
null,
null
],
[
"authToken",
"",
null,
""
]
],
"success": "Y",
"message": "Access is granted"
}
]

以下是我尝试过的不断抛出异常的代码:型号:

public class MyArray
{
public List<List<string>> fields { get; set; }
public string success { get; set; }
public string message { get; set; }
}
public class Root
{
public List<MyArray> MyArray { get; set; }
}

代码:

using Newtonsoft.Json;
static void Main(string[] args)
{     
string jsonContent = "[{"fields":[["name","value","values","error"],["correspondsApi","N",null,""],["username","test@test.com",null,""],["password","",null,""],["accountid","",null,""],["rememberMe","Y",null,""],["language","en-US",null,""],["S","tokenValue",null,null],["authToken","",null,""]], "success":"Y","message":"Access is granted"}]";
JsonConvert.DeserializeObject<Root>(jsonContent);

}     

异常:

Newtonsoft。Json。JsonSerializationException:"无法反序列化当前JSON数组(例如[1,2,3](转换为类型"LearningOnly"。根因为该类型需要一个JSON对象(例如{"name":"value"}(正确反序列化。要修复此错误,请将JSON更改为JSON对象(例如{"name":"value"}(或将反序列化类型更改为数组或实现集合接口的类型(例如。ICollection,IList(类似列表,可以从JSON反序列化大堆JsonArrayAttribute也可以添加到类型中,以强制它从JSON数组反序列化。路径'',第1行,位置1'

json和对象不匹配。要使用Root,您需要类似于{MyArray: [...]}的json,即具有包含数组的MyArray属性的对象。但你没有。您实际上想要使用:

JsonConvert.DeserializeObject<List<MyArray>>(jsonContent);

因为您的根json结构是一个数组,即[{},{}]不是一个对象。因此,您需要将其转换为枚举器(List<>或数组等(

此处的工作示例:https://dotnetfiddle.net/zA4VLA

我在https://json2csharp.com/

回答你的问题:;它必须如何在C#中建模">

public class MyArray    {
public List<List<string>> fields { get; set; } 
public string success { get; set; } 
public string message { get; set; } 
}
public class Root    {
public List<MyArray> MyArray { get; set; } 
}

最新更新