JsonHelper.cs 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. using Newtonsoft.Json;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. namespace TFT_Common
  6. {
  7. public static class JsonHelper
  8. {
  9. private static readonly JsonSerializerSettings jsonSerializerSetting = new()
  10. {
  11. ContractResolver = new Newtonsoft.Json.Serialization.DefaultContractResolver()
  12. {
  13. NamingStrategy = new Newtonsoft.Json.Serialization.SnakeCaseNamingStrategy()
  14. },
  15. NullValueHandling = NullValueHandling.Ignore
  16. };
  17. private static readonly JsonSerializerSettings ByteArrayToJsonSetting = new()
  18. {
  19. Converters = new List<JsonConverter>() {
  20. new JsonByteArrayConverter()
  21. },
  22. NullValueHandling = NullValueHandling.Ignore
  23. };
  24. public static string ToJsonExt(object data)
  25. {
  26. return JsonConvert.SerializeObject(data, jsonSerializerSetting);
  27. }
  28. /// <summary>
  29. /// 对象序列化为json字符串
  30. /// </summary>
  31. /// <param name="data">对象</param>
  32. /// <returns></returns>
  33. public static string ToJson(object data)
  34. {
  35. return JsonConvert.SerializeObject(data);
  36. }
  37. public static string ToJsonExt_ByteArray(object data)
  38. {
  39. return JsonConvert.SerializeObject(data, ByteArrayToJsonSetting);
  40. }
  41. /// <summary>
  42. /// json字符串反序列化为对象
  43. /// </summary>
  44. /// <typeparam name="T">对象</typeparam>
  45. /// <param name="data">json数据</param>
  46. /// <returns></returns>
  47. public static T ToObject<T>(string data)
  48. {
  49. return JsonConvert.DeserializeObject<T>(data);
  50. }
  51. }
  52. public class JsonByteArrayConverter : JsonConverter
  53. {
  54. public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
  55. {
  56. string result = string.Empty;
  57. if (value is byte[] temp)
  58. {
  59. result = BitConverter.ToString(temp);
  60. }
  61. writer.WriteValue(result);
  62. }
  63. public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
  64. {
  65. string strVal = reader.Value.ToString();
  66. if (strVal.Contains("-"))
  67. {
  68. string[] arr = strVal.Split('-');
  69. return arr.Select(x => byte.Parse(x)).ToArray();
  70. }
  71. else
  72. {
  73. throw new NotImplementedException();
  74. }
  75. }
  76. public override bool CanConvert(Type objectType)
  77. {
  78. return objectType == typeof(byte[]);
  79. }
  80. }
  81. }