Ausgabe
Ich verwende das Newtonsoft.Json-Paket.
Ganz oben im Formular:
Dictionary<string, string> FileList = new Dictionary<string, string>();
So serialisiere ich es jedes Mal, wenn ich etwas zur JSON-Textdatei hinzufüge, zuerst in eine Textdatei im Mouse-Up-Ereignis:
rectangleName = @"d:\Rectangles\rectangle" + saveRectanglesCounter + ".bmp";
FileList.Add($"{dr.Location}, {dr.Size}", rectangleName);
string json = JsonConvert.SerializeObject(
FileList,
Formatting.Indented // this for pretty print
);
using (StreamWriter sw = new StreamWriter(@"d:\rectangles.txt", true))
{
sw.Write(json);
sw.Close();
}
dann im Konstruktor
FileList = JsonConvert.DeserializeObject<Dictionary<string, string>>(@"d:\rectangles.txt");
aber ich bekomme Fehler in dieser Zeile:
Newtonsoft.Json.JsonReaderException: „Unerwartetes Zeichen beim Analysieren des Werts: d. Pfad ”, Zeile 0, Position 0.’
Ich habe versucht, zuerst den Dateiinhalt in die Zeichenfolgenvariable zu lesen und dann die Zeichenfolgenvariable zu deserialisieren:
string g = File.ReadAllText(@"d:\rectangles.txt");
FileList = JsonConvert.DeserializeObject<Dictionary<string, string>>(g);
aber bekomme jetzt Fehler:
Newtonsoft.Json.JsonReaderException HResult=0x80131500 Message=Nach Abschluss des Lesens des JSON-Inhalts wurde zusätzlicher Text gefunden: {. Pfad ”, Zeile 3, Position 1. Source=Newtonsoft.Json
Dies ist der Dateiinhalt, nicht der g-Variableninhalt, sondern die Datei:
"{X=79,Y=117}, {Width=278, Height=119}": "d:\\Rectangles\\rectangle1.bmp"
}{
"{X=79,Y=117}, {Width=278, Height=119}": "d:\\Rectangles\\rectangle1.bmp",
"{X=75,Y=101}, {Width=412, Height=195}": "d:\\Rectangles\\rectangle2.bmp"
}{
"{X=79,Y=117}, {Width=278, Height=119}": "d:\\Rectangles\\rectangle1.bmp",
"{X=75,Y=101}, {Width=412, Height=195}": "d:\\Rectangles\\rectangle2.bmp",
"{X=176,Y=256}, {Width=120, Height=122}": "d:\\Rectangles\\rectangle3.bmp"
}{
"{X=79,Y=117}, {Width=278, Height=119}": "d:\\Rectangles\\rectangle1.bmp",
"{X=75,Y=101}, {Width=412, Height=195}": "d:\\Rectangles\\rectangle2.bmp",
"{X=176,Y=256}, {Width=120, Height=122}": "d:\\Rectangles\\rectangle3.bmp",
"{X=202,Y=240}, {Width=24, Height=16}": "d:\\Rectangles\\rectangle4.bmp"
}{
"{X=79,Y=117}, {Width=278, Height=119}": "d:\\Rectangles\\rectangle1.bmp",
"{X=75,Y=101}, {Width=412, Height=195}": "d:\\Rectangles\\rectangle2.bmp",
"{X=176,Y=256}, {Width=120, Height=122}": "d:\\Rectangles\\rectangle3.bmp",
"{X=202,Y=240}, {Width=24, Height=16}": "d:\\Rectangles\\rectangle4.bmp",
"{X=190,Y=98}, {Width=78, Height=190}": "d:\\Rectangles\\rectangle5.bmp"
}{
"{X=79,Y=117}, {Width=278, Height=119}": "d:\\Rectangles\\rectangle1.bmp",
"{X=75,Y=101}, {Width=412, Height=195}": "d:\\Rectangles\\rectangle2.bmp",
"{X=176,Y=256}, {Width=120, Height=122}": "d:\\Rectangles\\rectangle3.bmp",
"{X=202,Y=240}, {Width=24, Height=16}": "d:\\Rectangles\\rectangle4.bmp",
"{X=190,Y=98}, {Width=78, Height=190}": "d:\\Rectangles\\rectangle5.bmp",
"{X=231,Y=86}, {Width=128, Height=174}": "d:\\Rectangles\\rectangle6.bmp"
}{
"{X=79,Y=117}, {Width=278, Height=119}": "d:\\Rectangles\\rectangle1.bmp",
"{X=75,Y=101}, {Width=412, Height=195}": "d:\\Rectangles\\rectangle2.bmp",
"{X=176,Y=256}, {Width=120, Height=122}": "d:\\Rectangles\\rectangle3.bmp",
"{X=202,Y=240}, {Width=24, Height=16}": "d:\\Rectangles\\rectangle4.bmp",
"{X=190,Y=98}, {Width=78, Height=190}": "d:\\Rectangles\\rectangle5.bmp",
"{X=231,Y=86}, {Width=128, Height=174}": "d:\\Rectangles\\rectangle6.bmp",
"{X=81,Y=94}, {Width=433, Height=293}": "d:\\Rectangles\\rectangle7.bmp"
}{
"{X=79,Y=117}, {Width=278, Height=119}": "d:\\Rectangles\\rectangle1.bmp",
"{X=75,Y=101}, {Width=412, Height=195}": "d:\\Rectangles\\rectangle2.bmp",
"{X=176,Y=256}, {Width=120, Height=122}": "d:\\Rectangles\\rectangle3.bmp",
"{X=202,Y=240}, {Width=24, Height=16}": "d:\\Rectangles\\rectangle4.bmp",
"{X=190,Y=98}, {Width=78, Height=190}": "d:\\Rectangles\\rectangle5.bmp",
"{X=231,Y=86}, {Width=128, Height=174}": "d:\\Rectangles\\rectangle6.bmp",
"{X=81,Y=94}, {Width=433, Height=293}": "d:\\Rectangles\\rectangle7.bmp",
"{X=147,Y=57}, {Width=114, Height=261}": "d:\\Rectangles\\rectangle8.bmp"
}
Lösung
Sie haben einen Fehler in Ihrem Code. Jedes Mal, wenn Sie einen JSON in eine Datei schreiben, hängen Sie ihn an einen vorhandenen JSON an. Dies führt dazu, dass Sie kein gültiges json haben, da es keinen Stamm hat. Um das Problem zu beheben, öffnen Sie einfach die Datei zum Überschreiben, nicht zum Anhängen
using (StreamWriter sw = new StreamWriter(@"d:\rectangles.txt", false))
{
sw.Write(json);
sw.Close();
}
und möglicherweise müssen Sie mit der leeren Datei beginnen, da die vorhandene nicht gültig ist.
Beantwortet von – Serge
Antwort geprüft von – Terry (FixError Volunteer)