csharp/1996v/Bssom.Net/Bssom.Serializer/Resolvers/BssomValueResolver.cs

BssomValueResolver.cs
using Bssom.Serializer.Formatters;
using Bssom.Serializer.Internal;
using System;
using System.Collections.Generic;

namespace Bssom.Serializer.Resolvers
{
    /// 
    /// 获取的类型的
    /// Gets  of the type 
    /// 
    public sealed clast BssomValueResolver : IFormatterResolver
    {
        /// 
        /// The singleton instance that can be used.
        /// 
        public static readonly BssomValueResolver Instance = new BssomValueResolver();

        public IBssomFormatter GetFormatter()
        {
            return FormatterCache.Formatter;
        }
        private static clast FormatterCache
        {
            public static readonly IBssomFormatter Formatter;

            static FormatterCache()
            {
                Type t = typeof(T);
                if (BssomValueResolverGetFormatterHelper.TryGetFormatter(t, out IBssomFormatter formatter))
                {
                    Formatter = (IBssomFormatter)formatter;
                    return;
                }
            }
        }
    }
}
namespace Bssom.Serializer.Internal
{
    internal static clast BssomValueResolverGetFormatterHelper
    {
        private static readonly Dictionary FormatterMap = new Dictionary()
        {
            { typeof(BssomNumber), BssomNumberFormatter.Instance },
            { typeof(BssomArray), BssomArrayFormatter.Instance },
            { typeof(BssomString), BssomStringFormatter.Instance },
            { typeof(BssomNull),BssomNullFormatter.Instance },
            { typeof(BssomMap),BssomMapFormatter.Instance },
            { typeof(BssomValue),BssomValueFormatter.Instance },
            { typeof(BssomGuid), BssomGuidFormatter.Instance },
            { typeof(BssomFloat), BssomFloatFormatter.Instance },
            { typeof(BssomDecimal), BssomDecimalFormatter.Instance },
            { typeof(BssomBoolean), BssomBooleanFormatter.Instance },
            { typeof(BssomDateTime), BssomDateTimeFormatter.Instance },
            { typeof(BssomChar), BssomCharFormatter.Instance },
        };

        internal static bool TryGetFormatter(Type t, out IBssomFormatter formatter)
        {
            if (FormatterMap.TryGetValue(t, out formatter))
            {
                return true;
            }

            return false;
        }
    }
}