| 

.NET C# Java Javascript Exception

5
Hallo zusammen,

bislang habe ich meine Daten (komplexe Objektstrukturen) mit dem .NET BinaryFormatter serialisiert. Nach dem ich dann vor ein paar Tagen aber an die Grenzen gestossen bin, suche ich nach Alternativen (SerializationException: The internal array cannot expand to greater than Int32.MaxValue elements.).

Ich bin auf Json.Net aufmerksam geworden, der schnell sein soll und auch kleinere Datei erzeugt ...

So weit so gut. Wenn ich nur serialisiere, sieht das auch gut aus, aber ich wollte die Daten auch schon mal wieder von der Festplatte lesen ...
JsonSerializationException: Could not create an instance of ... Type is an interface or abstract class

Dann habe ich das TypeNameHandling auf All gesetzt und es wurde etwas besser. Jetzt ruft der Deserialisier aber Konstruktoren mit Parametern auf und übergibt "null" ...

Mit ConstructorHandling.AllowNonPublicDefaultConstructor funktioniert es leider nicht immer.

Hat jemand schon mal Json.Net so konfiguriert bekommen, dass es genauso "problemlos" funktioniert wie der BinaryFormatter? :(

Danke,
Mike
07.12.2012
Xantiva 2,3k 2 9
Xantiva 2,3k 2 9
Kannst du nicht deine objekte ein wenig splitten?
-> jeder "Messwert" ein objekt + Repo?

Ich mach das mit mehreren hundert objekten und hatte nie ein problem damit (nutze aber xml)...

mongo könnte ich auch empfehlen... klappt super!
sonst vielleicht noch sqlite?
oder von servicestack die json serialisierung?
mehr fällt mir auf die schnelle nicht mehr ein... ;-)
wuliwux 12.12.2012
Hi wuliwux, als die Exception geworfen wurde, hatte ich ca. 11 Millionen Objekte ;)
Dabei wurde allerdings von viel "Overhead" erzeugt. Ich nutze jetzt eine kleine Optimierung und komme prinzipiell nur noch auf 1/32 an Werten. Dabei gibt es auch noch die Option, die großen Objekte aus der Struktur "auszuklinken" und einzeln zu serialisieren und der Datei einfach anzuhängen. Damit würde ich das Problem der Serialisierers ganz umgehen, nur die Factory, die die Objekte speichert und lädt würde etwas komplexer.
Der eigentliche Kern der Frage ist für mich hier aber die Erfahrungen mit Json.Net.
Xantiva 13.12.2012
... in Foren liest man so etwas wie: "Wer nutzt denn schon den eingebauter Serialisierer? Das geht doch besser mit ..."
Da fällt dann oft Json.Net ...
Der scheint aber Performance auf Kosten der "universellen Einsetzbarkeit" zu erzielen.
Xantiva 13.12.2012
1 Antwort
0
Wenn du Arrays mit mehr als Int32.MaxValue Elementen hast dann schreit das doch förmlich nach Verwendung einer Datenbank.
Ich empfehle dir mal zu schauen ob z.B. Mongo DB (http://www.mongodb.org/) nicht eine geeignete Alternative wäre.

Gruss Heiko
10.12.2012
Hallo heischo, nee - keine Datenbank. Das sind (Roh-)Daten, die bei einer Messung anfallen können (z. b. 200x am Tag). Die werden dann auf Platte gespeichert. Nach der anschliessenden Auswertung kommen die "kondensierten Daten" in eine Datenbank.
Xantiva 11.12.2012

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH