Serializzazione binaria in c# (realmente, serializzazione Wysiwyg)
-
29-10-2019 - |
Domanda
(Per Wysiwyg lo intendo io decidere CHE COSA è scritto e COME È scritto, e non qualcuno a Microsoft o su Google) (ok ... tecnicamente non decido nulla ... qualcuno che ha programmato alcuni anni fa ha deciso e posso solo chiedere quanto devo saltare)
Oggi mi sento un po 'stupido, ma ho già perso due ore alla ricerca della soluzione :-(.
Adesso...
Ho un protocollo binario. È basato su C, quindi è come guardare una struttura a C in cui è definita la fine della macchina (e per fortuna è la stessa dell'entennità "locale"), le dimensioni dei vari tipi sono definiti, è definito l'allineamento della struttura dei dati Il layout della struttura è definito, le stringhe sono matrici fisse di caratteri in una codifica di conoscenza ... tutto è definito! E tutto è molto simile a un C# unsafe struct
Quando stai usando [(LayoutKind.Explicit)]
E non sei molto esigente nell'uso del fixed
Modificatore per array. Ora ho bisogno di serializzarlo/deserializzarlo in C#... Mi sono guardato intorno ma non sono riuscito a trovare nulla ... cosa mi sono perso? Prima di chiedere, lo so BinaryFormatter
, ma non è abbastanza Wysiwyg per me ... BinaryFormatter
implementa il suo linguaggio di formattazione. Sì, lo so BitConverter
(E del fatto che non implementa i convertitori per Big-Endian), ma non è una soluzione "completa". È solo lo strumento "base". E so BinaryWriter
/BinaryReader
, ma non sembrano supportare array che non lo sono byte[]
o char[]
E non sembrano essere in grado di "recitare" un array alla scrittura (hai 5 elementi byte[]
Array e devi scriverlo come 10 elementi byte[]
array perché il formato che stai usando lo richiede ... devi scrivere righe di codice per farlo)
Il piano B (ma forse anche il piano z) è creare un'ombra unsafe struct
per ogni classe, a IWysiwygSerializable
interfaccia con due metodi (Read
e Write
) e implementa l'interfaccia in ogni classe (la scrittura popolerebbe il unsafe struct
e scriverlo nel flusso di output, la lettura farebbe il contrario) (o potrei anche fare direttamente decine di decine di BitConverter
nel Read
e Write
senza usare il struct
, ma per gli array è un po 'più difficile)
Grazie!
Nessuna soluzione corretta