예제 #1
0
        /// <summary>
        /// Compress the types on the serializable class.
        /// </summary>
        /// <param name="serializable">The serializable entity.</param>
        /// <param name="state">The <see cref="SerializationState"/>.</param>
        public void CompressTypes(
            SerializableExpression serializable,
            SerializationState state)
        {
            if (KeyCache.Count < 1)
            {
                return;
            }

            var expression = (TSerializable)serializable;

            // single props
            var parameters = KeyCache
                             .Where(entry => !entry.IsCollection)
                             .Select(
                cache =>
                (cache.GetKeys(expression)[0],
                 (Action <string>)(
                     s => cache.SetKeys(expression, new[] { s }))))
                             .ToArray();

            state.CompressTypesForKeys(parameters);

            // lists
            foreach (var parameter in KeyCache.Where(entry => entry.IsCollection))
            {
                var keys = parameter.GetKeys(expression).Select(
                    k => state.CompressTypesforKey(k)).ToArray();
                parameter.SetKeys(expression, keys);
            }
        }