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;
}
}
}