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.

Dynamic.cs 1.2 kB

1234567891011121314151617181920212223242526272829303132333435
  1. using System.Text.Json;
  2. namespace Discord.Serialization.Json.Converters
  3. {
  4. //TODO: Only supports cases where the key arrives first
  5. public class DynamicPropertyConverter : JsonPropertyConverter<object>
  6. {
  7. public override object Read(PropertyMap map, object model, ref JsonReader reader, bool isTopLevel)
  8. {
  9. if (map.GetDynamicConverter(model, false) is IJsonPropertyReader<object> converter)
  10. return converter.Read(map, model, ref reader, isTopLevel);
  11. else
  12. {
  13. JsonReaderUtils.Skip(ref reader);
  14. return null;
  15. }
  16. }
  17. public override void Write(PropertyMap map, object model, ref JsonWriter writer, object value, string key)
  18. {
  19. if (value == null)
  20. {
  21. if (key != null)
  22. writer.WriteAttributeNull(key);
  23. else
  24. writer.WriteNull();
  25. }
  26. else
  27. {
  28. var converter = (IJsonPropertyWriter)map.GetDynamicConverter(model, true);
  29. converter.Write(map, model, ref writer, value, key);
  30. }
  31. }
  32. }
  33. }