您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

42 行
1.5 KiB

  1. using System;
  2. using System.Runtime.CompilerServices;
  3. using JTNE.Protocol.Extensions;
  4. [assembly : InternalsVisibleTo ("JTNE.Protocol.Test")]
  5. namespace JTNE.Protocol {
  6. /// <summary>
  7. ///
  8. /// </summary>
  9. public static class JTNESerializer {
  10. public static byte[] Serialize (JTNEPackage jTNEPackage, int minBufferSize = 256) {
  11. return Serialize<JTNEPackage> (jTNEPackage, minBufferSize);
  12. }
  13. public static JTNEPackage Deserialize (ReadOnlySpan<byte> bytes) {
  14. return Deserialize<JTNEPackage> (bytes);
  15. }
  16. public static byte[] Serialize<T> (T obj, int minBufferSize = 256) {
  17. var formatter = JTNEFormatterExtensions.GetFormatter<T> ();
  18. byte[] buffer = JTNEArrayPool.Rent (minBufferSize);
  19. try {
  20. var len = formatter.Serialize (ref buffer, 0, obj);
  21. return buffer.AsSpan (0, len).ToArray ();
  22. } finally {
  23. JTNEArrayPool.Return (buffer);
  24. }
  25. }
  26. public static T Deserialize<T> (ReadOnlySpan<byte> bytes) {
  27. var formatter = JTNEFormatterExtensions.GetFormatter<T> ();
  28. int readSize;
  29. return formatter.Deserialize (bytes, out readSize);
  30. }
  31. public static dynamic Deserialize (ReadOnlySpan<byte> bytes, Type type) {
  32. var formatter = JTNEFormatterExtensions.GetFormatter (type);
  33. return JTNEFormatterResolverExtensions.JTNEDynamicDeserialize (formatter, bytes, out int readSize);
  34. }
  35. }
  36. }