| @@ -18,15 +18,20 @@ namespace Discord.Net.Converters | |||||
| public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) | public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) | ||||
| { | { | ||||
| object obj; | |||||
| T obj; | |||||
| // custom converters need to be able to safely fail; move this check in here to prevent wasteful casting when parsing primitives | |||||
| if (_innerConverter != null) | if (_innerConverter != null) | ||||
| obj = _innerConverter.ReadJson(reader, typeof(T), null, serializer); | |||||
| { | |||||
| object o = _innerConverter.ReadJson(reader, typeof(T), null, serializer); | |||||
| if (o is Optional<T>) | |||||
| return o; | |||||
| obj = (T)o; | |||||
| } | |||||
| else | else | ||||
| obj = serializer.Deserialize<T>(reader); | obj = serializer.Deserialize<T>(reader); | ||||
| if (obj is Optional<T>) | |||||
| return obj; | |||||
| return new Optional<T>((T)obj); | |||||
| return new Optional<T>(obj); | |||||
| } | } | ||||
| public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) | public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) | ||||