2017-11-01 1 views
0

Ich brauche mit einem JSON-Stream zu arbeiten, die große Blobs von Daten enthält (aber nicht so viele Knoten), zum Beispiel:Lesen große Blobs von json Strom

{ 
    "meta": { 
    "status": "ok" 
    }, 
    "items": [ 
    { 
     "name": "name of item 1", 
     "data": "In reality this could be a really long string of several hundred MB." 
    } 
    ] 
} 

Wenn dieses JSON-Stream liest ich bearbeiten wollen Die data Zeichenfolge als die Daten kommen, ohne die gesamte Zeichenfolge im Speicher zu haben.

Json.NET verfügt über eine JsonReader Klasse, die es ermöglicht, die Knoten so zu dekodieren, wie sie kommen, aber sie behält die gesamten Knoten im Speicher.

Gibt es eine Möglichkeit, mit Json.NET zu erreichen, was ich will, oder gibt es eine andere JSON-Bibliothek, die das kann (muss .Net-Core-kompatibel sein)?

Hinweis: Für XML kann dies mit der System.Xml.XmlReader Klasse gelöst werden, die als eine ReadValueChunkAsync Methode, die große Daten in Chunks aus dem eingehenden Stream lesen können.

Antwort

0

Ihr Problem klingt wie etwas, das nicht Teil der Bibliothek wäre, da es sehr speziell ist. Die Größesprobleme mit JSON entstehen normalerweise durch die Verarbeitung großer Arrays, für die eine Lösung in Newtonsoft.JSON existiert (d. H. Einen StreamReader an einen JsonReader übergeben).

Hilft Ihnen das vielleicht?

http://www.drdobbs.com/windows/parsing-big-records-with-jsonnet/240165316

+0

ich über die gekommen sind drdobbs Artikel. Es wird erläutert, wie Knoten aus einem Stream gelesen werden, aber nicht, wie ein Wert in Blöcken gelesen wird. –

+0

fixiert es auf der Senderseite eine Option? Zeichenfolgen in einem JSON-Objekt, die Speicherausnahmen verursachen, erscheinen wie eine riesige rote Flagge. Welche Lösung Sie auch auf der Empfängerseite finden, die Korrektur auf der Senderseite wäre der am wenigsten "hackige" Weg, dies zu tun. –

+0

Ich stimme zu, dass JSON ein ziemlich schlechtes Format ist, um diese Art von Daten zu übertragen. Aber leider besitze ich nicht die Senderseite. –