[FIXED] Wie kann man json verwenden, um von einer Textdatei zurück zu Dictionary zu deserialisieren?

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)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like