NameItemSettingInfoDTOListConverter.cs 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text.Json;
  4. using System.Text.Json.Serialization;
  5. using WingInterfaceLibrary.DTO.Device;
  6. namespace Vinno.vCloud.Common.FIS.AfterSales.Converters
  7. {
  8. internal class NameItemSettingInfoDTOListConverter : JsonConverter<List<NameItemSettingInfoDTO>>
  9. {
  10. public override bool CanConvert(Type typeToConvert)
  11. {
  12. if (!typeToConvert.IsGenericType)
  13. {
  14. return false;
  15. }
  16. if (typeToConvert.GetGenericTypeDefinition() != typeof(List<>))
  17. {
  18. return false;
  19. }
  20. return typeToConvert.GetGenericArguments()[0] == typeof(NameItemSettingInfoDTO);
  21. }
  22. public override List<NameItemSettingInfoDTO> Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
  23. {
  24. if (reader.TokenType != JsonTokenType.StartArray)
  25. {
  26. throw new JsonException();
  27. }
  28. List<NameItemSettingInfoDTO> list = null;
  29. while (reader.Read())
  30. {
  31. if (reader.TokenType == JsonTokenType.EndArray)
  32. {
  33. return list;
  34. }
  35. if (reader.TokenType == JsonTokenType.StartObject)
  36. {
  37. var nameItemDTO = JsonSerializer.Deserialize<NameItemSettingInfoDTO>(ref reader, options);
  38. if (list == null)
  39. {
  40. list = new List<NameItemSettingInfoDTO>();
  41. }
  42. if (nameItemDTO != null)
  43. {
  44. list.Add(nameItemDTO);
  45. }
  46. }
  47. }
  48. throw new JsonException();
  49. }
  50. public override void Write(Utf8JsonWriter writer, List<NameItemSettingInfoDTO> value, JsonSerializerOptions options)
  51. {
  52. if (value != null)
  53. {
  54. writer.WriteStartArray();
  55. foreach (var item in value)
  56. {
  57. JsonSerializer.Serialize(writer, item, options);
  58. }
  59. writer.WriteEndArray();
  60. }
  61. else
  62. {
  63. writer.WriteNullValue();
  64. }
  65. }
  66. }
  67. }