JsonExtensions.cs 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. using System;
  2. using System.Buffers;
  3. using System.Collections.Generic;
  4. using System.IO;
  5. using System.Text;
  6. using System.Text.Json;
  7. namespace TEAMModelOS.SDK.Extension
  8. {
  9. public static class JsonExtensions
  10. {
  11. public static string ToJsonString(this JsonDocument jdoc)
  12. {
  13. var bufferWriter = new ArrayBufferWriter<byte>();
  14. using var writer = new Utf8JsonWriter(bufferWriter, new JsonWriterOptions { Indented = true });
  15. jdoc.WriteTo(writer);
  16. writer.Flush();
  17. return Encoding.UTF8.GetString(bufferWriter.WrittenSpan);
  18. }
  19. public static string ToJsonString(this JsonElement jelement)
  20. {
  21. var bufferWriter = new ArrayBufferWriter<byte>();
  22. using var writer = new Utf8JsonWriter(bufferWriter, new JsonWriterOptions { Indented = true });
  23. jelement.WriteTo(writer);
  24. writer.Flush();
  25. return Encoding.UTF8.GetString(bufferWriter.WrittenSpan);
  26. }
  27. public static string ToJsonString(this Object obj, JsonSerializerOptions option = null)
  28. {
  29. if (option == null) {
  30. option = new System.Text.Json.JsonSerializerOptions
  31. {
  32. Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping
  33. };
  34. }
  35. var json = JsonSerializer.Serialize(obj, option);
  36. return json;
  37. }
  38. public static T ToObject<T>(this string json, JsonSerializerOptions option = null)
  39. {
  40. var obj = JsonSerializer.Deserialize<T>(json);
  41. return obj;
  42. }
  43. public static T ToObject<T>(this JsonDocument jdoc, JsonSerializerOptions options = null)
  44. {
  45. return jdoc.RootElement.ToObject<T>(options);
  46. }
  47. public static T ToObject<T>(this JsonElement jelement, JsonSerializerOptions options = null)
  48. {
  49. var bufferWriter = new ArrayBufferWriter<byte>();
  50. using var writer = new Utf8JsonWriter(bufferWriter);
  51. jelement.WriteTo(writer);
  52. writer.Flush();
  53. return JsonSerializer.Deserialize<T>(bufferWriter.WrittenSpan, options);
  54. }
  55. }
  56. }