Newtonsoft JsonSerializationException

Newtonsoft JsonSerializationException

我目前正在开发一个应用程序,想获取一些门票数据。为此,我使用 HttpClient 和 get 方法连接到 api。通过打开页面,我得到以下异常:

Newtonsoft.Json.JsonSerializationException: 'Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'System.Collections.Generic.List`1[App.Models.Ticket]' because the type requires a JSON array (e.g. [1,2,3]) to deserialize correctly. To fix this error either change the JSON to a JSON array (e.g. [1,2,3]) or change the deserialized type so that it is a normal .NET type (e.g. not a primitive type like integer, not a collection type like an array or List) that can be deserialized from a JSON object. JsonObjectAttribute can also be added to the type to force it to deserialize from a JSON object. Path 'id', line 1, position 6.'

你知道解决办法吗?是的,我插入了 URL。

Ticket.cs

public class Ticket
    {
        public string id { get; set; }
        public string message { get; set; }
        public List<string> notes { get; set; }
        public string status { get; set; }
        public string subject { get; set; }
    }

LoadTickets

public async void LoadTickets()
        {
            var content = "";
            HttpClient client = new HttpClient();
            var RestURL = "https://...";
            client.BaseAddress = new Uri(RestURL);
            client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
            HttpResponseMessage response = await client.GetAsync(RestURL);
            content = await response.Content.ReadAsStringAsync();
            var Items = JsonConvert.DeserializeObject<List<Ticket>>(content);
            ListViewTicket.ItemsSource = Items;
        }

Api

{
  "id": "1",
  "status": "closed",
  "subject": "Gerätefehler -21 bei SAP App",
  "message": "Beim Starten der SAP App kommt immer ein Fehler -21. Was muss ich machen?",
  "notes": [
    "Vielen Dank für Ihre Anfrage. Es wurde das Ticket 1 für Sie eröffnet",
    "Das ist ein eher kurzer Kommentar auf das Ticket.",
    "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet",
    "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."
  ]
}
connection: keep-alive 
 content-type: application/json 
 date: Mon03 Jan 2022 15:08:36 GMT 
 keep-alive: timeout=20 
 transfer-encoding: chunked 

您的 api 中只有一项,所以试试这个

Ticket item = JsonConvert.DeserializeObject<Ticket>(content);

或者您可以将其转换为列表

List<Ticket> items= new List<Ticket>{item};
 ListViewTicket.ItemsSource = Items;

或将您的 Api 更改为 return 列表而不是一个项目

[
{
  "id": "1",
  "status": "closed",
  "subject": "Gerätefehler -21 bei SAP App",
  "message": "Beim Starten der SAP App kommt immer ein Fehler -21. Was muss ich machen?",
  "notes": [
    "Vielen Dank für Ihre Anfrage. Es wurde das Ticket 1 für Sie eröffnet",
    "Das ist ein eher kurzer Kommentar auf das Ticket.",
    "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet",
    "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."
  ]
}
]

如果你的意思是笔记而不是你可以得到它们

List<string> notes = JsonConvert.DeserializeObject<Ticket>(content).notes;