ByteArrayConverter.cs 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text.Json;
  4. using System.Text.Json.Serialization;
  5. namespace SocketIOClient.JsonSerializer
  6. {
  7. class ByteArrayConverter : JsonConverter<byte[]>
  8. {
  9. public ByteArrayConverter()
  10. {
  11. Bytes = new List<byte[]>();
  12. }
  13. public List<byte[]> Bytes { get; }
  14. public override byte[] Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
  15. {
  16. byte[] bytes = null;
  17. if (reader.TokenType == JsonTokenType.StartObject)
  18. {
  19. reader.Read();
  20. if (reader.TokenType == JsonTokenType.PropertyName && reader.GetString() == "_placeholder")
  21. {
  22. reader.Read();
  23. if (reader.TokenType == JsonTokenType.True && reader.GetBoolean())
  24. {
  25. reader.Read();
  26. if (reader.TokenType == JsonTokenType.PropertyName && reader.GetString() == "num")
  27. {
  28. reader.Read();
  29. int num = reader.GetInt32();
  30. bytes = Bytes[num];
  31. reader.Read();
  32. }
  33. }
  34. }
  35. }
  36. return bytes;
  37. }
  38. public override void Write(Utf8JsonWriter writer, byte[] value, JsonSerializerOptions options)
  39. {
  40. Bytes.Add(value);
  41. writer.WriteStartObject();
  42. writer.WritePropertyName("_placeholder");
  43. writer.WriteBooleanValue(true);
  44. writer.WritePropertyName("num");
  45. writer.WriteNumberValue(Bytes.Count - 1);
  46. writer.WriteEndObject();
  47. }
  48. }
  49. }