Beispiel #1
0
        /// <summary>
        /// Perform a deep clone operation by serializing then deserializing an object.
        /// </summary>
        /// <typeparam name="T">The type of the object to clone.</typeparam>
        /// <param name="instance">The instance to clone.</param>
        /// <param name="settings">The settings to use with the <see cref="ObjectWriter"/></param>
        /// <returns>A deep clone of the <paramref name="instance"/>.</returns>
        public static T Clone <T>(T instance, SerializationSettings settings = null)
        {
            var ms = new List <object>(256);

            var pw = new TokenPrimitiveWriter(ms);
            var ow = new ObjectWriter(pw)
            {
                Settings = settings,
            };

            ow.Write(instance);

            var pr = new TokenPrimitiveReader(ms);
            var or = new ObjectReader(pr);

            var result = or.Read();

            return((T)result);
        }
Beispiel #2
0
        /// <summary>
        /// Perform a deep clone operation by serializing then deserializing an object.
        /// </summary>
        /// <typeparam name="T">The type of the object to clone.</typeparam>
        /// <param name="instance">The instance to clone.</param>
        /// <param name="settings">The settings to use with the <see cref="ObjectWriter"/></param>
        /// <returns>A deep clone of the <paramref name="instance"/>.</returns>
        public static T Clone <T>(T instance, SerializationSettings settings = null)
        {
            var ms = new List <object>(256);

            var pw = new TokenPrimitiveWriter(ms);
            var ow = new Writer(pw)
            {
                Settings = new SerializationSettings
                {
                    IgnoreISerializable = settings?.IgnoreISerializable ?? true,
                    IgnoreTypeConverter = settings?.IgnoreTypeConverter ?? true,
                },
            };

            ow.Write(instance);

            var pr = new TokenPrimitiveReader(ms);
            var or = new Reader(pr);

            var result = or.Read();

            return((T)result);
        }