2017-06-27 3 views
1

Ich habe eine JSON-Datei in C#. Es sind 70 MB Daten. Ich möchte es in einer Windows Forms-Anwendung mit JSON.net lesen, einige der Daten bearbeiten und sie wieder speichern. Mein Problem ist, ich möchte nicht alle Datenstrukturen für diese JSON-Datei erstellen, aber ich möchte einige davon erstellen. Wenn ich die Datei reserialiere, möchte ich alle Änderungen von den Datenstrukturen, die ich erstellt habe, ohne die Daten für die Strukturen zu verlieren, die ich nicht erstellt habe. Irgendeine Idee, wenn das möglich ist? Ich hoffe meine Frage ist klar.C# Partielle Deserialisierung und vollständige Serialisierung

+0

Muss dieses Ding unbedingt JSON anstelle einer Datenbank sein? Auf jede Frage der Form "Wie ich A schmerzhaft in eine zerbrechliche mutierte Imitation von etwas B überführe", lautet die Antwort fast immer "Wenn du B willst, weißt du, wo du es findest". –

+0

Was hast du probiert? Ich bin mir sicher, dass es möglich sein könnte, die Daten zu filtern, bevor sie von der Quelle erfasst werden. Aber es ist schwer zu sagen, ohne zu wissen, was Sie tatsächlich getan haben. – geostocker

+0

Sie können die vollständige Kontrolle über den Serialisierungsprozess erlangen, daher ist dies natürlich möglich. Implementieren Sie bei Bedarf ISerializable, speichern Sie einen Verweis auf die Datei, und wenn es Zeit für die Serialisierung ist, laden Sie die Datei, nehmen Sie Ihre Änderungen vor und speichern Sie sie entweder direkt in der Datei oder geben Sie ihren Inhalt zurück. Es ist die Implementierung, die hier schwer ist - das Konzept ist einfach. – hoodaticus

Antwort

2

Ich empfehle Ihnen, das XPath-Äquivalent für Json zu verwenden. Mit Json.NET können Sie die Zeichenfolge parse erstellen und ein dynamisches Objekt erstellen.

Mit SelectToken können Sie Werte abfragen oder Linq verwenden.

Für das Beispiel nehme ich eine JSON-Zeichenfolge an, die das serialisierte Objekt enthält.

Dadurch wird das gesamte Objekt deserialisiert und Sie müssen den zu ändernden Knoten kennen. Sie müssen das vollständige Objektmodell jedoch nicht implementieren.

+1

Das war die Idee hinter meinem Beitrag, wusste aber nicht, dass Sie könnten Pars zu einer Var so, danke, dass du mir etwas beigebracht hast. –

Verwandte Themen