You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

UInt64EntityOrIdConverter.cs 1.5 kB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. using Discord.API;
  2. using Newtonsoft.Json;
  3. using System;
  4. using System.Globalization;
  5. namespace Discord.Net.Converters
  6. {
  7. internal class UInt64EntityOrIdConverter<T> : JsonConverter
  8. {
  9. private readonly JsonConverter _innerConverter;
  10. public override bool CanConvert(Type objectType) => true;
  11. public override bool CanRead => true;
  12. public override bool CanWrite => false;
  13. public UInt64EntityOrIdConverter(JsonConverter innerConverter)
  14. {
  15. _innerConverter = innerConverter;
  16. }
  17. public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
  18. {
  19. switch (reader.TokenType)
  20. {
  21. case JsonToken.String:
  22. case JsonToken.Integer:
  23. return new EntityOrId<T>(ulong.Parse(reader.ReadAsString(), NumberStyles.None, CultureInfo.InvariantCulture));
  24. default:
  25. T obj;
  26. if (_innerConverter != null)
  27. obj = (T)_innerConverter.ReadJson(reader, typeof(T), null, serializer);
  28. else
  29. obj = serializer.Deserialize<T>(reader);
  30. return new EntityOrId<T>(obj);
  31. }
  32. }
  33. public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
  34. {
  35. throw new InvalidOperationException();
  36. }
  37. }
  38. }