DataContractFormatSerializer.cs 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Runtime.Serialization;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. using System.Xml;
  8. namespace trieTree.xiaoshi.sz.com
  9. {
  10. public static class DataContractFormatSerializer
  11. {
  12. public static string SerializeToBase64String<T>(T obj, bool compress)
  13. {
  14. byte[] ret = Serialize<T>(obj, compress);
  15. return Convert.ToBase64String(ret);
  16. }
  17. public static byte[]? Serialize<T>(T obj, bool compress)
  18. {
  19. if (obj == null)
  20. {
  21. return null;
  22. }
  23. byte[] info;
  24. using (MemoryStream stream = new MemoryStream())
  25. {
  26. DataContractSerializer serializer = new DataContractSerializer(obj.GetType());
  27. using (XmlDictionaryWriter binaryDictionaryWriter = XmlDictionaryWriter.CreateBinaryWriter(stream))
  28. {
  29. serializer.WriteObject(binaryDictionaryWriter, obj);
  30. binaryDictionaryWriter.Flush();
  31. }
  32. info = stream.ToArray();
  33. if (compress)
  34. {
  35. info = CompressHelper.CompressBytes(info);
  36. }
  37. }
  38. return info;
  39. }
  40. public static T DeserializeFromBase64String<T>(string baseString, bool decompress)
  41. {
  42. if (String.IsNullOrEmpty(baseString))
  43. return default(T);
  44. byte[] buffer = Convert.FromBase64String(baseString);
  45. return Deserialize<T>(buffer, decompress);
  46. }
  47. public static T Deserialize<T>(byte[] info, bool decompress)
  48. {
  49. T ret = default(T);
  50. if (info == null || info.Length <= 0)
  51. {
  52. return ret;
  53. }
  54. if (decompress)
  55. {
  56. info = CompressHelper.DeCompressBytes(info);
  57. }
  58. using (MemoryStream stream = new MemoryStream(info))
  59. {
  60. DataContractSerializer serializer = new DataContractSerializer(typeof(T));
  61. using (XmlDictionaryReader binaryDictionaryReader = XmlDictionaryReader.CreateBinaryReader(stream, XmlDictionaryReaderQuotas.Max))
  62. {
  63. ret = (T)serializer.ReadObject(binaryDictionaryReader);
  64. }
  65. }
  66. return ret;
  67. }
  68. }
  69. }