public static byte[] ObjectToByteArray(object obj) { if (obj == null) { obj = new NullRepresentative(); } BinaryFormatter bf = new BinaryFormatter(); using (MemoryStream ms = new MemoryStream()) { bf.Serialize(ms, obj); return(ms.ToArray()); } }
/// <summary> /// Serializes an object to a byte array. /// </summary> /// <param name="obj">The object to serialize.</param> /// <returns>A byte-based representation of the object.</returns> public virtual byte[] Serialize(object obj) { if (obj is null) { obj = new NullRepresentative(); } using (MemoryStream stream = new MemoryStream()) { using (BinaryWriter writer = new BinaryWriter(stream)) { PowerSerializationContext context = CreateSerializationContext(); Type objType = context.RegisterObject(obj).Item2; CheckTypeAllowance(objType); if (objType == typeof(string)) { writer.Write((string)obj); long pos = writer.BaseStream.Position; TypeResolver.WriteTypeID(writer, objType); writer.Write((int)(writer.BaseStream.Position - pos)); } else if (obj is Type typeRepresentation) { TypeResolver.WriteTypeID(writer, typeRepresentation); long pos = writer.BaseStream.Position; TypeResolver.WriteTypeID(writer, typeof(Type)); writer.Write((int)(writer.BaseStream.Position - pos)); } else if (objType.IsPrimitive) { WritePrimitiveObject(writer, obj); long pos = writer.BaseStream.Position; TypeResolver.WriteTypeID(writer, objType); writer.Write((int)(writer.BaseStream.Position - pos)); } else { if (obj is Array array) { byte rankSize = (byte)array.Rank; writer.Write(rankSize); for (int i = 0; i < array.Rank; i++) { writer.Write(array.GetLength(i)); } } for (int i = 1; i < context.ObjectGraph.Count; i++) { SerializeObject(context, writer, context.ObjectGraph[i], context.ObjectGraph[i].GetType()); } ImmutableList <Type> types = context.IncludedTypes; long pos = writer.BaseStream.Position; foreach (Type type in types) { TypeResolver.WriteTypeID(writer, type); } writer.Write((int)(writer.BaseStream.Position - pos)); } return(stream.ToArray()); } } }