using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; namespace TFT_Common { public static class JsonHelper { private static readonly JsonSerializerSettings jsonSerializerSetting = new() { ContractResolver = new Newtonsoft.Json.Serialization.DefaultContractResolver() { NamingStrategy = new Newtonsoft.Json.Serialization.SnakeCaseNamingStrategy() }, NullValueHandling = NullValueHandling.Ignore }; private static readonly JsonSerializerSettings ByteArrayToJsonSetting = new() { Converters = new List() { new JsonByteArrayConverter() }, NullValueHandling = NullValueHandling.Ignore }; public static string ToJsonExt(object data) { return JsonConvert.SerializeObject(data, jsonSerializerSetting); } /// /// 对象序列化为json字符串 /// /// 对象 /// public static string ToJson(object data) { return JsonConvert.SerializeObject(data); } public static string ToJsonExt_ByteArray(object data) { return JsonConvert.SerializeObject(data, ByteArrayToJsonSetting); } /// /// json字符串反序列化为对象 /// /// 对象 /// json数据 /// public static T ToObject(string data) { return JsonConvert.DeserializeObject(data); } } public class JsonByteArrayConverter : JsonConverter { public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { string result = string.Empty; if (value is byte[] temp) { result = BitConverter.ToString(temp); } writer.WriteValue(result); } public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { string strVal = reader.Value.ToString(); if (strVal.Contains("-")) { string[] arr = strVal.Split('-'); return arr.Select(x => byte.Parse(x)).ToArray(); } else { throw new NotImplementedException(); } } public override bool CanConvert(Type objectType) { return objectType == typeof(byte[]); } } }