コード例 #1
0
        protected virtual object DeserializeDefaultPrimitive(Type type, TDeserializeState state)
        {
            var matchedHandler = CustomPrimitiveHandlers.FirstOrDefault(x => x.PrimitiveChecker.IsPrimitive(type));

            if (matchedHandler == null)
            {
                throw new Exception($"The primitive matched has no handler: {type}");
            }
            return(matchedHandler.Deserialize(state, type));
        }
コード例 #2
0
ファイル: GenericSerializer.cs プロジェクト: RedDude/LazyData
        protected virtual void SerializePrimitive <T>(T value, Type type, TSerializeState state)
        {
            if (value == null)
            {
                HandleNullData(state);
                return;
            }

            var isDefaultPrimitive = DefaultPrimitiveHandler.PrimitiveChecker.IsPrimitive(type);

            if (isDefaultPrimitive)
            {
                DefaultPrimitiveHandler.Serialize(state, value, type);
                return;
            }

            var actualType           = type;
            var possibleNullableType = MappingRegistry.TypeMapper.TypeAnalyzer.GetNullableType(type);

            if (possibleNullableType != null)
            {
                actualType = possibleNullableType;
                var isNullablePrimitive = DefaultPrimitiveHandler.PrimitiveChecker.IsPrimitive(actualType);
                if (isNullablePrimitive)
                {
                    DefaultPrimitiveHandler.Serialize(state, value, actualType);
                    return;
                }
            }

            var matchingHandler = CustomPrimitiveHandlers.SingleOrDefault(x => x.PrimitiveChecker.IsPrimitive(actualType));

            if (matchingHandler == null)
            {
                throw new NoKnownTypeException(actualType);
            }
            matchingHandler.Serialize(state, value, actualType);
        }
コード例 #3
0
        protected virtual object DeserializePrimitive(Type type, TDeserializeState state)
        {
            if (IsDataNull(state))
            {
                return(null);
            }

            var isDefaultPrimitive = DefaultPrimitiveHandler.PrimitiveChecker.IsPrimitive(type);

            if (isDefaultPrimitive)
            {
                return(DefaultPrimitiveHandler.Deserialize(state, type));
            }

            var actualType           = type;
            var possibleNullableType = MappingRegistry.TypeMapper.TypeAnalyzer.GetNullableType(type);

            if (possibleNullableType != null)
            {
                actualType = possibleNullableType;
                var isNullablePrimitive = DefaultPrimitiveHandler.PrimitiveChecker.IsPrimitive(actualType);
                if (isNullablePrimitive)
                {
                    return(DefaultPrimitiveHandler.Deserialize(state, possibleNullableType));
                }
            }

            var matchingHandler = CustomPrimitiveHandlers.SingleOrDefault(x => x.PrimitiveChecker.IsPrimitive(actualType));

            if (matchingHandler != null)
            {
                return(matchingHandler.Deserialize(state, actualType));
            }

            throw new NoKnownTypeException(actualType);
        }