我从外部API收到了一个JOSN,如下所示:
[{
"assignedto": "MAIN STAFF",
"createduser": "API-71",
"departmentid": "1",
"observations": [{
"abnormalflag": "abnormal",
"analytename": "HGB A1C",
"value": "5"
}],
"pages": [],
"priority": "2",
"status": "REVIEW"
}]
我在Visual Studio中做了选择性粘贴,并获得了以下课程
public class Rootobject
{
public Class1[] Property1 { get; set; }
}
public class Class1
{
public string assignedto { get; set; }
public string createduser { get; set; }
public string departmentid { get; set; }
public Observation[] observations { get; set; }
public object[] pages { get; set; }
public string priority { get; set; }
public string status { get; set; }
}
public class Observation
{
public string abnormalflag { get; set; }
public string analytename { get; set; }
public string value { get; set; }
}
反序列化时,出现以下错误
运行时异常(第24行):无法将当前JSON数组(例如[1,2,3])反序列化为类型“ Rootobject”,因为该类型需要JSON对象(例如{“ name”:“ value” })正确反序列化。
要解决此错误,可以将JSON更改为JSON对象(例如{“ name”:“ value”}),也可以将反序列化类型更改为数组或实现集合接口的类型(例如ICollection,IList),例如可以从JSON数组反序列化的列表。还可以将JsonArrayAttribute添加到类型中,以强制其从JSON数组反序列化。 路径”,第1行,位置1。
C#代码
public static void Main(string[] args)
{
var json = @"[{
""assignedto"": ""MAIN ST (HUB) STAFF"",
""createduser"": ""API-7127"",
""departmentid"": ""1"",
""observations"": [{
""abnormalflag"": ""abnormal"",
""analytename"": ""HGB A1C"",
""value"": ""5""
}],
""pages"": [],
""priority"": ""2"",
""status"": ""REVIEW""
}]";
Rootobject resultObj = JToken.Parse(json).ToObject<Rootobject>();
}
我提到了类似Create a strongly typed c# object from json object with ID as the name之类的问题-但这是一个不同的问题。
有人知道如何解决此问题吗?另外,从JSON生成C#类的更好方法是什么?
注意:我还尝试了从http://json2csharp.com/获得的课程。这也很糟糕-Fidlle 2
答案 0 :(得分:3)
我将使用Newtonsoft / Json转换并更改它:
Rootobject resultObj = JToken.Parse(json).ToObject<Rootobject>();
收件人:
using Newtonsoft.Json;
-- snip --
var resultObj = JsonConvert.DeserializeObject<List<Class1>>(json);
Console.WriteLine(resultObj.Count); // 1
Class1 result = resultObj[0];
Console.WriteLine(result.assignedto); // "MAIN ST (HUB) STAFF"
这将为您提供RootObject
如上述@JeffMeracdo所述-您正在提供一个对象集合,并试图将其解析为单个对象
答案 1 :(得分:1)
如@JeffMeracdo所述,请尝试以下操作:
List<Example> resultObj = JsonConvert.DeserializeObject<List<Example>>(json);
跟随 using 语句和软件包以及 Newtonsoft.Json Nuget软件包:
using Newtonsoft.Json;
课程:
public class Observation
{
public string abnormalflag { get; set; }
public string analytename { get; set; }
public string value { get; set; }
}
public class Example
{
public string assignedto { get; set; }
public string createduser { get; set; }
public string departmentid { get; set; }
public List<Observation> observations { get; set; }
public List<object> pages { get; set; }
public string priority { get; set; }
public string status { get; set; }
}