/// <summary> /// Serialize an object /// </summary> /// <typeparam name="T">Any reference type</typeparam> /// <param name="obj">Object to serialize</param> /// <param name="options">Serialization options</param> /// <returns>Byte array containing the serialized object</returns> public static byte[] Serialize <T>(T obj, SerializationOptions options) { using (var ms = new MemoryStream()) { if (obj == null) { return(new byte[0]); } object objToSerialize = ObjectCleaner.PrepareObjectForSerialization(obj); var cargo = new SerializerObjectTracker(); var serializerMethod = GetTypeToObjectSerializer(obj.GetType()); var stringSerializerMethod = (Action <Stream, string, SerializerObjectTracker>)GetTypeSerializer(typeof(string)); var intSerializerMethod = (Action <Stream, int, SerializerObjectTracker>)GetTypeSerializer(typeof(int)); WriteHeader(ms, cargo, options); if (!options.OmitRootTypeName) { stringSerializerMethod(ms, SerializedTypeResolver.GetShortNameFromType(obj.GetType()), cargo); } intSerializerMethod(ms, SerializedTypeResolver.GetHashCodeFromType(obj.GetType()), cargo); serializerMethod(ms, objToSerialize, cargo); return(ms.ToArray()); } }
public void TrackingNullObjectShouldTrackNothing() { var tracker = new SerializerObjectTracker(); tracker.TrackObject(null); Assert.Equal(0, tracker.NumberOfTrackedObjects); }
private static void WriteHeader(MemoryStream ms, SerializerObjectTracker objectTracker, SerializationOptions options) { var shortSerializerMethod = (Action <Stream, short, SerializerObjectTracker>)GetTypeSerializer(typeof(short)); var byteSerializerMethod = (Action <Stream, byte, SerializerObjectTracker>)GetTypeSerializer(typeof(byte)); shortSerializerMethod(ms, InternalSerializationStuff.Version, objectTracker); byteSerializerMethod(ms, options.OmitRootTypeName ? (byte)1 : (byte)0, objectTracker); }
public void GettingTheIndexOfANullObjectShouldReturnNull() { var tracker = new SerializerObjectTracker(); Assert.False(tracker.GetTrackedObjectIndex(null).HasValue); }