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.

EntityOrIdPropertyConverter.cs 1.0 kB

1234567891011121314151617181920212223242526272829303132
  1. using Discord.API;
  2. using System.Text.Json;
  3. namespace Discord.Serialization.Json.Converters
  4. {
  5. internal class EntityOrIdPropertyConverter<T> : IJsonPropertyConverter<EntityOrId<T>>
  6. {
  7. private readonly IJsonPropertyConverter<T> _innerConverter;
  8. public EntityOrIdPropertyConverter(IJsonPropertyConverter<T> innerConverter)
  9. {
  10. _innerConverter = innerConverter;
  11. }
  12. public EntityOrId<T> Read(JsonReader reader, bool read = true)
  13. {
  14. if (read)
  15. reader.Read();
  16. if (reader.ValueType == JsonValueType.Number)
  17. return new EntityOrId<T>(reader.ParseUInt64());
  18. return new EntityOrId<T>(_innerConverter.Read(reader));
  19. }
  20. public void Write(JsonWriter writer, EntityOrId<T> value)
  21. {
  22. if (value.Object != null)
  23. _innerConverter.Write(writer, value.Object);
  24. else
  25. writer.WriteValue(value.Id);
  26. }
  27. }
  28. }