using System; using System.IO; using System.Runtime.InteropServices; using System.Runtime.Serialization; using System.Runtime.Serialization.Formatters.Binary; [StructLayout(LayoutKind.Sequential)] [Serializable] public struct Quaternion { public char[] bone0; public char[] bone1; public Int16 qw; public Int16 qx; public Int16 qy; public Int16 qz; public override string ToString() { return $"{qw} {qx} {qy} {qz}"; } } class Program { private static byte[] Serialize(T obj) { IFormatter formatter = new BinaryFormatter(); using (MemoryStream stream = new MemoryStream()) { formatter.Serialize(stream, obj); return stream.ToArray(); } } private static T Deserialize(byte[] param) { using (MemoryStream ms = new MemoryStream(param)) { IFormatter br = new BinaryFormatter(); return (T)br.Deserialize(ms); } } static void Main(string[] args) { var bytes = Serialize(new Quaternion { qw = 1, qx = 2, qy = 3, qz = 4 }); var obj = Deserialize(bytes); Console.WriteLine(obj); } }