static bool GetParameterSerializer(TypeInfo type, out IParameterSerializer serializer) { if (typeof(ITestParameter).GetTypeInfo().IsAssignableFrom(type)) { serializer = null; return(true); } if (type.Equals(typeof(bool))) { serializer = new BooleanSerializer(); return(true); } else if (type.Equals(typeof(int))) { serializer = new IntegerSerializer(); return(true); } else if (type.Equals(typeof(string))) { serializer = new StringSerializer(); return(true); } else if (type.IsEnum) { var serializerType = typeof(EnumSerializer <>).MakeGenericType(type.AsType()); serializer = (IParameterSerializer)Activator.CreateInstance(serializerType); return(true); } serializer = null; return(false); }
/// <summary> /// Returns a serializer that can be used to serialize and object /// of type <paramref name="objectType"/>. /// <note> /// TODO: Add support for caching. /// </note> /// </summary> /// <param name="objectType">The type of object to be serialized.</param> /// <param name="ctx">The serialization context.</param> public virtual ISerializer Build(Type objectType, SerializationContext ctx) { if (objectType == null) { return(null); } ISerializer s; if (typeof(Calendar).IsAssignableFrom(objectType)) { s = new CalendarSerializer(ctx); } else if (typeof(ICalendarComponent).IsAssignableFrom(objectType)) { s = typeof(CalendarEvent).IsAssignableFrom(objectType) ? new EventSerializer(ctx) : new ComponentSerializer(ctx); } else if (typeof(ICalendarProperty).IsAssignableFrom(objectType)) { s = new PropertySerializer(ctx); } else if (typeof(CalendarParameter).IsAssignableFrom(objectType)) { s = new ParameterSerializer(ctx); } else if (typeof(string).IsAssignableFrom(objectType)) { s = new StringSerializer(ctx); } else if (objectType.GetTypeInfo().IsEnum) { s = new EnumSerializer(objectType, ctx); } else if (typeof(TimeSpan).IsAssignableFrom(objectType)) { s = new TimeSpanSerializer(ctx); } else if (typeof(int).IsAssignableFrom(objectType)) { s = new IntegerSerializer(ctx); } else if (typeof(Uri).IsAssignableFrom(objectType)) { s = new UriSerializer(ctx); } else if (typeof(ICalendarDataType).IsAssignableFrom(objectType)) { s = _mDataTypeSerializerFactory.Build(objectType, ctx); } // Default to a string serializer, which simply calls // ToString() on the value to serialize it. else { s = new StringSerializer(ctx); } return(s); }