无法使用 System.Text.Json.JsonSerializer class 反序列化我的 JSON 响应
Can't de-serialized my JSON response using the System.Text.Json.JsonSerializer class
我正在使用 System.Text.Json
反序列化我的 JSON
,我知道 Json.Net
但选择不使用它。
我正在使用 return 字符串的 System.Net.Http.HttpClient.GetStringAsync
方法向 https://jsonplaceholder.typicode.com/ 发出请求。对请求的响应是一个 JSON
数组,其中填充了具有以下键的对象:userId
、id
、title
和 body
。我正在使用 Deserialize
generic
方法反序列化我的 JSON
,其中 Posts
是我的 return 类型,response
是我的字符串。
通过捕获异常,我得到了如下所示的错误。
我目前有
static readonly HttpClient client = new HttpClient();
static async Task Main(string[] args)
{
await GetPostAsync();
}
static async Task GetPostAsync()
{
client.BaseAddress = new Uri("https://jsonplaceholder.typicode.com/");
string location = "posts";
try
{
string response = await client.GetStringAsync(location);
Posts deserializedPosts = JsonSerializer.Deserialize<Posts>(response);
Console.WriteLine(deserializedPosts);
}
catch (System.Exception e)
{
Console.WriteLine(e);
}
}
class Posts
{
public int userId { get; set; }
public int id { get; set; }
public string title { get; set; }
public string body { get; set; }
}
我收到的错误
System.Text.Json.JsonException: The JSON value could not be converted to fugo.Program+Posts. Path: $ | LineNumber: 0 | BytePositionInLine: 1.
at System.Text.Json.ThrowHelper.ThrowJsonException_DeserializeUnableToConvertValue(Type propertyType)
at System.Text.Json.JsonSerializer.HandleStartArray(JsonSerializerOptions options, Utf8JsonReader& reader, ReadStack& state)
at System.Text.Json.JsonSerializer.ReadCore(JsonSerializerOptions options, Utf8JsonReader& reader, ReadStack& readStack)
at System.Text.Json.JsonSerializer.ReadCore(Type returnType, JsonSerializerOptions options, Utf8JsonReader& reader)
at System.Text.Json.JsonSerializer.Deserialize(String json, Type returnType, JsonSerializerOptions options)
at System.Text.Json.JsonSerializer.Deserialize[TValue](String json, JsonSerializerOptions options)
at fugo.Program.GetPostAsync() in /home/kepler/PROJECTS/C-SHARP/fugo/Program.cs:line 27
更改此行:
Posts deserializedPosts = JsonSerializer.Deserialize<Posts>(response);
对此:
var deserializedPosts = JsonSerializer.Deserialize<List<Posts>>(response);
返回的数据是数组,不是对象。
我正在使用 System.Text.Json
反序列化我的 JSON
,我知道 Json.Net
但选择不使用它。
我正在使用 return 字符串的 System.Net.Http.HttpClient.GetStringAsync
方法向 https://jsonplaceholder.typicode.com/ 发出请求。对请求的响应是一个 JSON
数组,其中填充了具有以下键的对象:userId
、id
、title
和 body
。我正在使用 Deserialize
generic
方法反序列化我的 JSON
,其中 Posts
是我的 return 类型,response
是我的字符串。
通过捕获异常,我得到了如下所示的错误。
我目前有
static readonly HttpClient client = new HttpClient();
static async Task Main(string[] args)
{
await GetPostAsync();
}
static async Task GetPostAsync()
{
client.BaseAddress = new Uri("https://jsonplaceholder.typicode.com/");
string location = "posts";
try
{
string response = await client.GetStringAsync(location);
Posts deserializedPosts = JsonSerializer.Deserialize<Posts>(response);
Console.WriteLine(deserializedPosts);
}
catch (System.Exception e)
{
Console.WriteLine(e);
}
}
class Posts
{
public int userId { get; set; }
public int id { get; set; }
public string title { get; set; }
public string body { get; set; }
}
我收到的错误
System.Text.Json.JsonException: The JSON value could not be converted to fugo.Program+Posts. Path: $ | LineNumber: 0 | BytePositionInLine: 1.
at System.Text.Json.ThrowHelper.ThrowJsonException_DeserializeUnableToConvertValue(Type propertyType)
at System.Text.Json.JsonSerializer.HandleStartArray(JsonSerializerOptions options, Utf8JsonReader& reader, ReadStack& state)
at System.Text.Json.JsonSerializer.ReadCore(JsonSerializerOptions options, Utf8JsonReader& reader, ReadStack& readStack)
at System.Text.Json.JsonSerializer.ReadCore(Type returnType, JsonSerializerOptions options, Utf8JsonReader& reader)
at System.Text.Json.JsonSerializer.Deserialize(String json, Type returnType, JsonSerializerOptions options)
at System.Text.Json.JsonSerializer.Deserialize[TValue](String json, JsonSerializerOptions options)
at fugo.Program.GetPostAsync() in /home/kepler/PROJECTS/C-SHARP/fugo/Program.cs:line 27
更改此行:
Posts deserializedPosts = JsonSerializer.Deserialize<Posts>(response);
对此:
var deserializedPosts = JsonSerializer.Deserialize<List<Posts>>(response);
返回的数据是数组,不是对象。