JsonExtensions.cs 2.9 KB

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