2016-05-05 13 views
0

Ich versuche, Datei mit einer Liste von Benutzern in JSON zu erhalten, es in eine Liste von Benutzerobjektobjekten zu serialisieren, einen neuen Benutzer zu dieser Liste hinzuzufügen und dann re-serialisieren Sie diese Liste und schreiben Sie sie in die Datei.C# UWP JSON.net Probleme beim Deserialisieren und Reserialisieren von Objekt aus Datei

Hier ist der Code, den ich verwendet habe.

public async void appendFile(User _user) 
    { 
     StorageFolder folder = ApplicationData.Current.LocalFolder; 
     StorageFile file = await folder.GetFileAsync("LocalUsers.txt"); 
     string Json = await FileIO.ReadTextAsync(file); 

     List<User> users = JsonConvert.DeserializeObject<List<User>>(Json); 
     users.Add(_user); 

     string s = convertJson(users); 
     await FileIO.WriteTextAsync(file, s); 

    } 

Wenn der Code ausgeführt wird wirft es diesen Fehler: Eine Ausnahme vom Typ ‚Newtonsoft.Json.JsonSerializationException‘ in Newtonsoft.Json.dll aufgetreten, wurde aber in Benutzercode

Zusätzliche Informationen nicht behandelt: Das aktuelle JSON-Objekt (z. B. {"name": "value"}) kann nicht in Typ 'System.Collections.Generic.List`1 [Xymby.Models.User]' deserialisiert werden, da der Typ ein JSON-Array benötigt (z. B. [1, 2,3]) um richtig zu deserialisieren.

Um diesen Fehler zu beheben, ändern Sie entweder den JSON in ein JSON-Array (zB [1,2,3]) oder ändern Sie den deserialisierten Typ, so dass es ein normaler .NET-Typ ist (zB kein primitiver Typ wie Integer, nicht ein Sammlertyp wie ein Array oder eine Liste), der aus einem JSON-Objekt deserialisiert werden kann. JsonObjectAttribute kann auch zum Typ hinzugefügt werden, um die Deserialisierung von einem JSON-Objekt zu erzwingen.

Nicht sicher, was ich hier falsch mache, würde jede Hilfe geschätzt werden auch würde ich für alle Änderungen offen sein, die effizienter als meine Implementierung sind.

+1

Das bedeutet, dass die json Sie deserialisieren versuchen, ist keine Liste. Kannst du bestätigen, dass es mit [] 's verpackt ist? –

+0

Das ist, was die Datei hat: sie wurde ursprünglich mit JSON.net serialisiert {"ID": "d5d8fa11-1a95-4a73-9666-66671bc03d51", "Name": "Brian"} – evilsushi

Antwort

0

Ihr json ist eine einzelne Entität des Typs Benutzer, daher wird sie nicht in eine Liste deserialisiert. Wickeln Sie den JSON mit [] und es wird funktionieren. Stellen Sie sicher, dass Sie beim Schreiben der JSON-Datei zukünftig nur einen Sammlertyp und nicht einen einzelnen Benutzer schreiben.

Anbetracht dessen, was man als die aktuelle JSON-Datei geliefert haben, sollte Folgendes tun:

[{"ID":"d5d8fa11-1a95-4a73-9666-66671bc03d51","Name":"Brian"}]

+0

Ich glaube das hat es, Danke – evilsushi

Verwandte Themen