C# 控制台应用程序无法反序列化JSON
我在执行代码时收到以下错误: JsonSerializationException:无法将当前JSON对象(例如{“名称”:“值”})反序列化为类型 'AzureWinWorkloadList.AzureWinWorkloadList+数据[]',因为 需要JSON数组(例如[1,2,3])才能正确反序列化。修理 此错误或者将JSON更改为JSON数组(例如[1,2,3]),或者 更改反序列化类型,使其成为正常的.NET类型(例如。 不是integer之类的基元类型,也不是数组之类的集合类型 可以从JSON对象反序列化的。 还可以将JsonObjectAttribute添加到类型以强制其 从JSON对象反序列化。路径“SkipToken”,第2行,位置 十四, 这是一个独立的控制台应用程序,不是MVC类型项目的一部分。而且,这在几周前对我来说是有效的,但当我回到它的时候,现在我得到了那个错误 以下是我的JSON的外观:C# 控制台应用程序无法反序列化JSON,c#,json,console,httpclient,C#,Json,Console,Httpclient,我在执行代码时收到以下错误: JsonSerializationException:无法将当前JSON对象(例如{“名称”:“值”})反序列化为类型 'AzureWinWorkloadList.AzureWinWorkloadList+数据[]',因为 需要JSON数组(例如[1,2,3])才能正确反序列化。修理 此错误或者将JSON更改为JSON数组(例如[1,2,3]),或者 更改反序列化类型,使其成为正常的.NET类型(例如。 不是integer之类的基元类型,也不是数组之类的集合类型 可
{
"SkipToken": null,
"Data": [
{
"name": "5678-PLACE-32",
"OSType": "Windows",
"CompName": "COMPUTER001",
"RGName": "RG1234",
"SubID": "AA1234567891011",
"SubName": "SUBNAME-Tool"
},
{
"name": "5678-PLACE-33",
"OSType": "Windows",
"CompName": "SERVER001",
"RGName": "RG1234",
"SubID": "AB1234567891011",
"SubName": "SUBNAME-Tool"
},
{
"name": "5678-PLACE-34",
"OSType": "Windows",
"CompName": "COMPUTER002",
"RGName": "RG1234",
"SubID": "AC1234567891011",
"SubName": "SUBNAME-Tool"
},
{
"name": "5678-PLACE-35",
"OSType": "Windows",
"CompName": "SERVER002",
"RGName": "RG1234",
"SubID": "AD1234567891011",
"SubName": "SUBNAME-Tool"
}
]
}
这是我的模型课:
public class Data
{
public string Name { get; set; }
public string OSType { get; set; }
public string CompName { get; set; }
public string RGName { get; set; }
public string SubID { get; set; }
public string SubName { get; set; }
}
这是我的密码:
using System;
using System.Net.Http;
using System.Net.Http.Headers;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
namespace AzureWinWorkloadList
{
class AzureWinWorkloadList
{
static void Main(string[] args)
{
using (var client = new HttpClient())
{
client.BaseAddress = new Uri("https://samm-prod-azfun.azurewebsites.net/api/...");
var responseTask = client.GetAsync("");
responseTask.Wait();
var result = responseTask.Result;
if (result.IsSuccessStatusCode)
{
var readTask = result.Content.ReadAsAsync<Data[]>();
readTask.Wait();
var compnames = readTask.Result;
foreach (var CompName in compnames)
{
Console.WriteLine(CompName.CompName);
}
}
}
Console.ReadLine();
}
任何关于这方面的指导都将不胜感激!
提前谢谢 您需要一个包装类来反序列化JSON数据
public class WrapperClass
{
public SkipTokenClass SkipToken { get; set; }
public IEnumerable<Data> Data { get; set; }
}
...
var readTask = result.Content.ReadAsAsync<WrapperClass>();
...
var wrapper = readTask.Result;
保存SkipToken和数据属性的类在哪里?(提示)您的JSON不代表您尝试反序列化的类型。你不能只是瞎编。幸运的是,有很多很多服务可以帮助您将JSON转换为正确的类型,比如;这个网站有很多点击率。这能回答你的问题吗?仅供参考,自C#7.1以来,您可以使用
异步任务Main()
方法,以便像普通方法一样等待,而不是等待()/。结果
public class WrapperClass
{
public SkipTokenClass SkipToken { get; set; }
public IEnumerable<Data> Data { get; set; }
}
...
var readTask = result.Content.ReadAsAsync<WrapperClass>();
...
var wrapper = readTask.Result;
[JsonProperty("name")]
public string Name { get; set; }