Ejemplo n.º 1
0
        /// <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());
            }
        }
Ejemplo n.º 2
0
        public void TrackingNullObjectShouldTrackNothing()
        {
            var tracker = new SerializerObjectTracker();

            tracker.TrackObject(null);
            Assert.Equal(0, tracker.NumberOfTrackedObjects);
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        public void GettingTheIndexOfANullObjectShouldReturnNull()
        {
            var tracker = new SerializerObjectTracker();

            Assert.False(tracker.GetTrackedObjectIndex(null).HasValue);
        }