示例#1
0
        public static IEnumerable <DecoratorHandler> Create([NotNull] IContextualSerializerProvider serializerProvider,
                                                            [NotNull] IContextualSerializerLookupKeyFactory lookupKeyFactory,
                                                            [NotNull] ISerializerStrategyFactory fallbackFactory)
        {
            if (serializerProvider == null)
            {
                throw new ArgumentNullException(nameof(serializerProvider));
            }
            if (lookupKeyFactory == null)
            {
                throw new ArgumentNullException(nameof(lookupKeyFactory));
            }
            if (lookupKeyFactory == null)
            {
                throw new ArgumentNullException(nameof(lookupKeyFactory));
            }

            //Order matters. The last handler act as the essentially a default handler except it does still have some requirements but not much
            return(new List <DecoratorHandler>
            {
                new SpecialComplexTypeSerializerDecoratorhandler(serializerProvider),                 //handles special inaccessible types like DateTime
                new PrimitiveTypeSerializerDecoratorHandler(serializerProvider),
                new ArraySerializerDecoratorHandler(serializerProvider),
                new EnumSerializerDecoratorHandler(serializerProvider, fallbackFactory),
                new StringSerializerDecoratorHandler(serializerProvider),
                new SubComplexTypeSerializerDecoratorHandler(serializerProvider, new MemberSerializationMediatorFactory(serializerProvider, lookupKeyFactory)),
                new ComplexTypeSerializerDecoratorHandler(serializerProvider, new MemberSerializationMediatorFactory(serializerProvider, lookupKeyFactory))                 //it's important that this is the final/last handler
            });
        }
示例#2
0
        public static bool HasSerializerFor([NotNull] this IContextualSerializerProvider provider, ContextTypeFlags contextFlags, [NotNull] IContextKey key, [NotNull] Type type)
        {
            if (provider == null)
            {
                throw new ArgumentNullException(nameof(provider), $"Cannot call extension method on null {nameof(IContextualSerializerProvider)}");
            }

            if (key == null)
            {
                throw new ArgumentNullException(nameof(key));
            }
            if (type == null)
            {
                throw new ArgumentNullException(nameof(type));
            }
            if (!Enum.IsDefined(typeof(ContextTypeFlags), contextFlags))
            {
                throw new ArgumentOutOfRangeException(nameof(contextFlags), "Value should be defined in the ContextTypeFlags enum.");
            }

            /*if (!Enum.IsDefined(typeof(ContextTypeFlags), contextFlags))
             *      throw new InvalidEnumArgumentException(nameof(contextFlags), (int) contextFlags, typeof(ContextTypeFlags));*/

            return(provider.HasSerializerFor(new ContextualSerializerLookupKey(contextFlags, key, type)));
        }
示例#3
0
        public DefaultSerializerStrategyFactory([NotNull] IEnumerable <DecoratorHandler> handlers, [NotNull] IContextualSerializerProvider serializerProvider,
                                                [NotNull] ISerializerStrategyFactory fallbackFactory, [NotNull] IContextualSerializerLookupKeyFactory lookupKeyFactory, ISerializerStrategyRegistry strategyRegistry)
        {
            if (serializerProvider == null)
            {
                throw new ArgumentNullException(nameof(serializerProvider), $"Provided {nameof(IContextualSerializerProvider)} service was null.");
            }

            if (handlers == null)
            {
                throw new ArgumentNullException(nameof(handlers), $"Provided {nameof(DecoratorHandler)}s were null. Must be a non-null collection.");
            }

            if (fallbackFactory == null)
            {
                throw new ArgumentNullException(nameof(fallbackFactory), $"Provided {nameof(ISerializerStrategyFactory)} service was null.");
            }

            if (lookupKeyFactory == null)
            {
                throw new ArgumentNullException(nameof(lookupKeyFactory), $"Provided {nameof(IContextualSerializerLookupKeyFactory)} service was null.");
            }

            lookupKeyFactoryService   = lookupKeyFactory;
            StrategyRegistry          = strategyRegistry ?? throw new ArgumentNullException(nameof(strategyRegistry));
            decoratorHandlers         = handlers;
            serializerProviderService = serializerProvider;
            fallbackFactoryService    = fallbackFactory;
        }
示例#4
0
        protected DecoratorHandler([NotNull] IContextualSerializerProvider serializerProvider)
        {
            if (serializerProvider == null)
            {
                throw new ArgumentNullException(nameof(serializerProvider), $"Provided argument {nameof(serializerProvider)} is null.");
            }

            serializerProviderService = serializerProvider;
        }
        public ComplexTypeSerializerDecoratorHandler([NotNull] IContextualSerializerProvider serializerProvider, [NotNull] IMemberSerializationMediatorFactory serializationMediatorFactory)
            : base(serializerProvider)
        {
            if (serializationMediatorFactory == null)
            {
                throw new ArgumentNullException(nameof(serializationMediatorFactory));
            }

            SerializationMediatorFactory = serializationMediatorFactory;
        }
        public EnumSerializerDecoratorHandler(IContextualSerializerProvider serializerProvider, ISerializerStrategyFactory fallbackFactory)
            : base(serializerProvider)
        {
            if (fallbackFactory == null)
            {
                throw new ArgumentNullException(nameof(fallbackFactory), $"Provided argument {nameof(fallbackFactory)} was null.");
            }

            fallbackFactoryService = fallbackFactory;
        }
示例#7
0
        public MemberSerializationMediatorFactory([NotNull] IContextualSerializerProvider typeSerializerProvider, [NotNull] IContextualSerializerLookupKeyFactory lookupKeyFactory)
        {
            if (typeSerializerProvider == null)
            {
                throw new ArgumentNullException(nameof(typeSerializerProvider));
            }
            if (lookupKeyFactory == null)
            {
                throw new ArgumentNullException(nameof(lookupKeyFactory));
            }

            this.typeSerializerProvider = typeSerializerProvider;
            this.lookupKeyFactory       = lookupKeyFactory;
        }
示例#8
0
 public ContextualLazyStrategyProvider(IContextualSerializerProvider provider, ContextualSerializerLookupKey key)
 {
     SerializerStrategy = new Lazy <ITypeSerializerStrategy>(() => provider.Get(key), true);
 }
示例#9
0
 public ContextlessLazyStrategyProvider(IContextualSerializerProvider provider, Type t)
 {
     SerializerStrategy = new Lazy <ITypeSerializerStrategy>(() => provider.Get(t), true);
 }
示例#10
0
 public ArraySerializerDecoratorHandler([NotNull] IContextualSerializerProvider serializerProvider)
     : base(serializerProvider)
 {
 }
 /// <inheritdoc />
 public SpecialComplexTypeSerializerDecoratorhandler([NotNull] IContextualSerializerProvider serializerProvider)
     : base(serializerProvider)
 {
 }
 public PrimitiveTypeSerializerDecoratorHandler([NotNull] IContextualSerializerProvider serializerProvider)
     : base(serializerProvider)
 {
 }