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); }
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); }