c# - DataContractSerializer serializing List<T> getting error -
i trying serialize list, serializes (i think fine), when deserialize,
sorry amount of code, stuck , have no idea why happening, tried changed struct class , no help.
thanks.
i following error updated
there error deserializing object of type there error deserializing object of type `system.collections.generic.list`1[[a.b.c.datavalues, a.v, version=1.0.0.0, culture=neutral, publickeytoken=null]]. unexpected end of file. following elements not closed: time, datavalues, arrayofdatavalues.`
i serializing updated
public void serializedatavalue(list<datavalues> values) { datacontractserializer serializer = new datacontractserializer(typeof(list<datavalues>)); using (memorystream stream = new memorystream()) { using (gzipstream compress = new gzipstream(stream, compressionmode.compress)) { xmldictionarywriter w = xmldictionarywriter.createbinarywriter(compress); serializer.writeobject(w, values); } _serializeddata = stream.toarray(); } }
i deserializing updated
public list<datavalues> deserializedatavalue() { if (serializeddata == null || serializeddata.length == 0) { return new list<datavalues> (); } else { datacontractserializer serializer = new datacontractserializer(typeof(list<datavalues>)); using (memorystream stream = new memorystream(serializeddata)) { using (gzipstream decompress = new gzipstream(stream, compressionmode.decompress)) { xmldictionaryreader r = xmldictionaryreader.createbinaryreader(decompress, xmldictionaryreaderquotas.max); return serializer.readobject(r, true) list<datavalues>; } } } }
properties
private byte[] _serializeddata; [datamember] [browsable(false)] public byte[] serializeddata { { return _serializeddata; } set { _serializeddata = value; } }
helper methods
public static byte[] readfully(stream input) { byte[] buffer = new byte[16 * 1024]; input.position = 0; using (memorystream ms = new memorystream()) { int read; while ((read = input.read(buffer, 0, buffer.length)) > 0) { ms.write(buffer, 0, read); } return ms.toarray(); } }
struct
[datacontract(name = "datavalues", namespace = "a.b.c")] public struct datavalues { [datamember] public datetime time { get; set; } [datamember] public single value { get; set; } public datavalues(datetime datetime, single value) { time = datetime; value = value; } }
i can sample work removing xmldictionaryreader , instead directly feeding input/output stream datacontractserializer. may defect in xmldictionaryreader large compressed collections i'm not sure.
hope helps:
public void serializedatavalue(list<datavalues> values) { datacontractserializer serializer = new datacontractserializer(typeof(list<datavalues>)); using (memorystream stream = new memorystream()) { using (gzipstream compress = new gzipstream(stream, compressionmode.compress)) { serializer.writeobject(compress , values); } _serializeddata = stream.toarray(); } } public list<datavalues> deserializedatavalue() { if (serializeddata == null || serializeddata.length == 0) { return new list<datavalues> (); } else { datacontractserializer serializer = new datacontractserializer(typeof(list<datavalues>)); using (memorystream stream = new memorystream(serializeddata)) { using (gzipstream decompress = new gzipstream(stream, compressionmode.decompress)) { return serializer.readobject(decompress , true) list<datavalues>; } } } }
Comments
Post a Comment