using Newtonsoft.Json; using Newtonsoft.Json.Serialization; using System; using System.IO; namespace Tiger.Model.Extensions { /// /// /// public static class JsonExtension { /// /// /// /// /// private static JsonSerializerSettings GetSetting(bool isIgnoreNull = false) { JsonSerializerSettings setting = new JsonSerializerSettings { ContractResolver = new DefaultContractResolver(), DateFormatHandling = DateFormatHandling.MicrosoftDateFormat, DateFormatString = "yyyy-MM-dd HH:mm:ss" }; if (isIgnoreNull) { setting.NullValueHandling = NullValueHandling.Ignore; } return setting; } /// /// 将对象序列化成Json字符串 /// /// 需要序列化的对象 /// 是否忽略null值得属性 /// public static string? ToJson(this object value, bool isIgnoreNull = false) { if (value == null) { return default; } return JsonConvert.SerializeObject(value, GetSetting(isIgnoreNull)); } /// /// /// /// /// /// /// public static string? ToJson(this object value, Type type, bool isIgnoreNull = false) { if (value == null) { return default; } return JsonConvert.SerializeObject(value, type, GetSetting(isIgnoreNull)); } /// /// /// /// /// /// /// public static string ToJson(this object value, Formatting formatting, bool isIgnoreNull = false) { if (value == null) { return default; } return JsonConvert.SerializeObject(value, formatting, GetSetting(isIgnoreNull)); } /// /// 将Json字符串反序列化为对象 /// /// 对象类型 /// public static T? ToObject(this string json, bool isIgnoreNull = false) { if (string.IsNullOrWhiteSpace(json)) { return default; } return JsonConvert.DeserializeObject(json, GetSetting(isIgnoreNull)); } /// /// 将Json字符串反序列化为对象 /// /// json字符串 /// 对象类型 /// public static object? ToObject(this string json, Type type) { if (string.IsNullOrWhiteSpace(json)) { return default; } return JsonConvert.DeserializeObject(json, type); } /// /// /// /// /// /// /// public static T? ToObject(this object obj, bool isIgnoreNull = false) { if (obj == null) { return default; } string json = obj.ToJson(isIgnoreNull); return json.ToObject(isIgnoreNull); } /// /// /// /// /// /// public static object? ToObject(this object obj, Type type) { if (obj == null) { return default; } string json = obj.ToJson(type); return json.ToObject(); } /// /// Json对象反序列化 /// /// /// 字符流 /// public static T? ToObject(Stream stream) { if (stream == null) { return default; } var serializer = new JsonSerializer(); serializer.NullValueHandling = NullValueHandling.Ignore; serializer.ObjectCreationHandling = ObjectCreationHandling.Replace; serializer.MissingMemberHandling = MissingMemberHandling.Ignore; serializer.ReferenceLoopHandling = ReferenceLoopHandling.Ignore; using (var sr = new StreamReader(stream)) { using (var jsonTextReader = new JsonTextReader(sr)) { return serializer.Deserialize(jsonTextReader); } } } /// /// Json对象反序列化 /// /// 字符流 /// 反序列化类型 /// public static object? ToObject(Stream stream, Type type) { if (stream == null) { return default; } var serializer = new JsonSerializer(); serializer.NullValueHandling = NullValueHandling.Ignore; serializer.ObjectCreationHandling = ObjectCreationHandling.Replace; serializer.MissingMemberHandling = MissingMemberHandling.Ignore; serializer.ReferenceLoopHandling = ReferenceLoopHandling.Ignore; using (var sr = new StreamReader(stream)) { using (var jsonTextReader = new JsonTextReader(sr)) { return serializer.Deserialize(jsonTextReader, type); } } } /// /// /// /// /// public static Stream? ToStream(this object value) { if (value == null) { return default; } var stream = new MemoryStream(); using (var writer = new StreamWriter(stream)) { using (JsonTextWriter jsonWriter = new JsonTextWriter(writer)) { var ser = new JsonSerializer(); ser.DateFormatHandling = DateFormatHandling.IsoDateFormat; ser.Serialize(jsonWriter, value); jsonWriter.Flush(); } } return stream; } } }