Hallo zusammen,
ich würde gerne Binärdaten serialisieren, sprich ein byte[] in eine passende Struktur übertragen.
Ich habe mich jetzt schon ganz schwindelig gegoogelt. Vielleicht kann mir jemand von Euch was dazu sagen.
Hier mein momentaner Stand:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| static public void setTelStructureByArray<T>(byte[] arr, ref T data) { data=(T)RawDeserialize(arr, typeof(T)); }
private static object RawDeserialize(byte[] rawdatas, Type anytype) { int rawsize = Marshal.SizeOf(anytype); if (rawsize > rawdatas.Length) return null; GCHandle handle = GCHandle.Alloc(rawdatas, GCHandleType.Pinned); IntPtr buffer = handle.AddrOfPinnedObject(); object retobj = Marshal.PtrToStructure(buffer, anytype); handle.Free(); return retobj; } |
Mein Problem ist nun: wenn in der Struktur ein Array mit flexibler Größe enthalten
ist, wird RawDeserialize nicht komplett ausgeführt, da hier die Bedingung
(rawsize > rawdatas.Length) zuschlägt.
Hat jemand eine Idee, wie man das Array behandeln kann ? Wie man vielleicht oben
schon sehen kann, suche ich hier nach einer generischen Lösung, die mit verschiedenen
structs, teils mit, teils ohne Array arbeiten kann.
Vielen Dank für alle Hinweise !
Ach ja, ich sag's gleich dazu: RawDeserialize ist nicht von mir, sie tut aber bis auf
den oben genannten Fall ziemlich genau das was ich brauche ...
Moderiert von Christian S.: Topic aus Sonstiges (C# / .NET) verschoben am Mo 19.11.2007 um 15:20