CoreFormatter.cs 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. using System;
  2. using System.IO;
  3. using System.Linq;
  4. using H.Formatters;
  5. public interface ICoreFormattable
  6. {
  7. void Write(BinaryWriter writer);
  8. void Read(BinaryReader reader);
  9. }
  10. namespace InABox.Formatters
  11. {
  12. public class CoreFormatter<T1> : FormatterBase where T1 : ICoreFormattable
  13. {
  14. protected override byte[] SerializeInternal(object obj)
  15. {
  16. if (obj is ICoreFormattable _formattable)
  17. {
  18. using (var ms = new MemoryStream())
  19. {
  20. using (var writer = new BinaryWriter(ms))
  21. _formattable.Write(writer);
  22. return ms.ToArray();
  23. }
  24. }
  25. return new byte[] { };
  26. }
  27. protected override T DeserializeInternal<T>(byte[] bytes)
  28. {
  29. if (bytes.Any() && Activator.CreateInstance<T>() is ICoreFormattable result)
  30. {
  31. using (var ms = new MemoryStream(bytes))
  32. {
  33. using (var reader = new BinaryReader(ms))
  34. result.Read(reader);
  35. return (T)result;
  36. }
  37. }
  38. return default;
  39. }
  40. }
  41. }