Json in Liste umwandeln C#?
Hey leute
ich versuche die Json Datei auf Bild 1 mit der Methode von Bild 2 zu deserialisieren damit ich eine Liste von Büchern habe, die ich dann auf der Konsole ausgebe.
Der output ist aber wie auf Bild 3 anstatt
11 - Hello - 11
12 - World - 12
Weiß jemand woran das liegt?
Hier sieht man noch meine ToString Methode für die Book Klasse
2 Antworten
Um **JSON-Daten** in eine **Liste von Objekten** in C# umzuwandeln, gibt es verschiedene Ansätze. Hier sind einige Möglichkeiten:
1. **Newtonsoft.Json (Json.NET)**:
- Die beliebte Bibliothek **Json.NET** (auch bekannt als Newtonsoft.Json) bietet eine einfache Möglichkeit, JSON-Daten zu deserialisieren.
- Zuerst müssen Sie Ihre Klassen entsprechend der Struktur Ihrer JSON-Daten definieren. Stellen Sie sicher, dass die Klasseneigenschaften den JSON-Eigenschaftsnamen entsprechen.
- Beispiel:
```csharp
using Newtonsoft.Json;
using System.Collections.Generic;
class Wrapper
{
[JsonProperty("JsonValues")]
public ValueSet ValueSet { get; set; }
}
class ValueSet
{
[JsonProperty("id")]
public string Id { get; set; }
[JsonProperty("values")]
public Dictionary<string, Value> Values { get; set; }
}
class Value
{
[JsonProperty("id")]
public string Id { get; set; }
[JsonProperty("diaplayName")]
public string DisplayName { get; set; }
}
// Deserialisierung
var jsonString = @"{ ... }"; // Ihr JSON-String hier
var valueSet = JsonConvert.DeserializeObject<Wrapper>(jsonString).ValueSet;
```
2. **System.Text.Json** (eingebaut in .NET Core und .NET 5+):
- .NET Core und .NET 5+ bieten eine eingebaute JSON-Serialisierungs- und Deserialisierungsbibliothek namens **System.Text.Json**.
- Ähnlich wie bei Json.NET müssen Sie Ihre Klassen entsprechend der JSON-Struktur definieren und die `JsonSerializer`-Klasse verwenden.
- Beispiel:
```csharp
using System.Text.Json;
// Ihre Klassen hier definieren (wie oben)
// Deserialisierung
var jsonString = @"{ ... }"; // Ihr JSON-String hier
var valueSet = JsonSerializer.Deserialize<Wrapper>(jsonString).ValueSet;
```
Wählen Sie die Methode, die am besten zu Ihrem Projekt passt, und passen Sie die Klassendefinitionen entsprechend Ihrer JSON-Struktur an. Vergessen Sie nicht, den JSON-String durch Ihre tatsächlichen Daten zu ersetzen. 🚀
Quelle: Unterhaltung mit Bing, 12.2.2024
(1) How to convert Json array to list of objects in c# - Stack Overflow. https://stackoverflow.com/questions/19581820/how-to-convert-json-array-to-list-of-objects-in-c-sharp.
(2) how to convert json to list c# - Stack Overflow. https://stackoverflow.com/questions/52313229/how-to-convert-json-to-list-c-sharp.
(3) C# JSON file into list - Stack Overflow. https://stackoverflow.com/questions/16416138/c-sharp-json-file-into-list.
(4) Convert Json String to C# Object List - Stack Overflow. https://stackoverflow.com/questions/22191167/convert-json-string-to-c-sharp-object-list.
(5) Serialisieren und Deserialisieren von JSON mit C# – .NET - .NET. https://learn.microsoft.com/de-de/dotnet/standard/serialization/system-text-json/overview.
(6) github.com. https://github.com/shendongnian/download4/tree/e45352911534dfb757cba4d0074eec312760536f/code5%2F799078-19593892-50097554-2.cs.
(7) github.com. https://github.com/farrukhkhan89/ProgrammingChallenges/tree/caf79b146e91da3cf4125c4634d11fc0c49457d8/LongestPalindomeTask%2FProgram.cs.
Deine Model-Klasse wird wohl falsch sein.
Dies wäre eine korrekte Version:
public class Book
{
[JsonPropertyName("isbn")]
public string Isbn { get; set; }
[JsonPropertyName("title")]
public string Title { get; set; }
[JsonPropertyName("price")]
public decimal Price { get; set; }
public override string ToString() => $"{Isbn} - {Title} - {Price}";
}
In dem Fall ja, denn der Propertyname in der Model-Klasse muss mit dem Propertynamen des JSON-Objekts übereinstimmen.
Heißt "Attribute", such mal danach, ist ein wichtiges Thema.
Sind diese Anmerkungen über den Properties Pflicht damit es funktioniert?