Hallo allerseits,
im folgenden Programm ist das Array immer leer.
using System;
using System.IO;
using System.Text.Json;
using System.Windows.Forms;
namespace test123
{
public partial class Form1 : Form
{
Song[] Songs;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
string jsonString = File.ReadAllText(@"C:\users\kstan\source\LED\testextension.txt");
Songs = JsonSerializer.Deserialize<Song[]>(jsonString);
for (int loop = 0; loop < Songs.Length; loop++)
{
MessageBox.Show(Songs[loop].VTitle);
}
}
[Serializable]
public class Song
{
public string VRelease { get; set; }
public string VTrack { get; set; }
public string VTitle { get; set; }
public string VArtist { get; set; }
public string VAlbum { get; set; }
public Song(string vRelease, string vTrack, string vTitle, string vArtist, string vAlbum)
{
VRelease = vRelease;
VTrack = vTrack;
VTitle = vTitle;
VArtist = vArtist;
VAlbum = vAlbum;
}
public Song()
{
}
}
}
}
Nach dem einlesen mit File.Read steht in jsonString ein sauberer Json String. Songs.Length ist in meinem Fall 7. Trotzdem zeigt die MessageBox immer leer an.
Die Json-Datei ist
[
{
"ReleaseDate": "22.11.1968",
"Track": "29",
"Title": "Revolution 9",
"Artist": "Beatles",
"Album": "The Beatles White Album"
},
{
"ReleaseDate": "1960",
"Track": "6",
"Title": "Fools Rush In",
"Artist": "Frank Sinatra",
"Album": "Nice N Easy"
},
{
"ReleaseDate": "11.11.1971",
"Track": "1",
"Title": "One of These Days",
"Artist": "Pink Floyd",
"Album": "Meddle"
},
{
"ReleaseDate": "1988",
"Track": "7",
"Title": "Where Is My Mind?",
"Artist": "Pixies",
"Album": "Surfer Rosa"
},
{
"ReleaseDate": "5.1981",
"Track": "9",
"Title": "Can't Find My Mind",
"Artist": "Cramps",
"Album": "Psychedelic Jungle"
},
{
"ReleaseDate": "10.6.2003",
"Track": "13",
"Title": "Scatterbrain. (As Dead As Leaves.)",
"Artist": "Radiohead",
"Album": "Hail to the Thief"
},
{
"ReleaseDate": "30.6.1992",
"Track": "3",
"Title": "Dress",
"Artist": "P J Harvey",
"Album": "Dry"
}
]
Der Debugger zeigt mit auch, dass die Daten immer Null sind. Warum?
Was ist da falsch?
Es wird ein public Standard ctor benötigt, oder der ctor muss gekennzeichnet werden.
Die Namen in der Json-Datei passen nicht zu den Eigenschaften (z.B. ReleaseDate
<-> VRelease
).
Was soll das V
überhaupt bei den Eigenschaftsnamen?
Danke - ich hatte das einfach übersehen.
Das V ist historisch gewachsen. Das kann weg. 😉
Grundsätzlich geht es schon was du vorhast, aber wie Th69 schon sagte, stimmen die Properties nicht überein.
Du kannst das "umgehen" wenn du über das jeweilige Property in der Klasse Song eine Annotation setzt:
[JsonPropertyName("ReleaseDate")]
public string VRelease { get; set; }
Sauberer wäre es allerdings, wenn die Properties identisch wären.
.....an unhandled exception is the first way to think about your pattern of programming....
.....nur weil ich nicht weiß was dort passiert, bedeutet es nicht, dass ich nicht weiß, wie man es lösen kann - aber das ist wahrscheinlich....
Gut zu wissen - da ich aber erst am Anfang bin und fast nichts umstellen muss, ist es für mich einfach, die Properties identisch zu machen.