C# 反序列化,支持基本数据类型处理
代码
public class ConvertUtils
{
/// <summary>
/// 对象映射
/// </summary>
/// <param name="obj"></param>
/// <param name="formatting"></param>
/// <param name="settings"></param>
/// <returns></returns>
public static T Mapper<T>(object obj)
{
var json = ToJsonString(obj);
return Parse<T>(json);
}
/// <summary>
/// 优化对基本数据类型和空指针的支持
/// </summary>
/// <param name="obj"></param>
/// <param name="formatting"></param>
/// <param name="settings"></param>
/// <returns></returns>
public static T Parse<T>(string json, JsonSerializerSettings settings = null)
{
if (typeof(T) == typeof(string))
{
return (T)(object)json;
}
if (string.IsNullOrWhiteSpace(json) || "null".Equals(json, StringComparison.OrdinalIgnoreCase))
{
return default(T);
}
//if(typeof(IConvertible).IsAssignableFrom(typeof(T)))
if (typeof(DateTime).IsAssignableFrom(typeof(T)))
{
return (T)(object)Convert.ToDateTime(json);
}
if (typeof(int).IsAssignableFrom(typeof(T)))
{
return (T)(object)Convert.ToInt32(json);
}
if (typeof(long).IsAssignableFrom(typeof(T)))
{
return (T)(object)Convert.ToInt64(json);
}
if (typeof(float).IsAssignableFrom(typeof(T)))
{
return (T)(object)Convert.ToSingle(json);
}
if (typeof(double).IsAssignableFrom(typeof(T)))
{
return (T)(object)Convert.ToDouble(json);
}
if (typeof(decimal).IsAssignableFrom(typeof(T)))
{
return (T)(object)Convert.ToDecimal(json);
}
if (typeof(bool).IsAssignableFrom(typeof(T)))
{
return (T)(object)Convert.ToBoolean(json);
}
if (typeof(byte).IsAssignableFrom(typeof(T)))
{
return (T)(object)Convert.ToByte(json);
}
if (typeof(char).IsAssignableFrom(typeof(T)))
{
return (T)(object)Convert.ToChar(json);
}
if (typeof(ushort).IsAssignableFrom(typeof(T)))
{
return (T)(object)Convert.ToUInt16(json);
}
if (typeof(uint).IsAssignableFrom(typeof(T)))
{
return (T)(object)Convert.ToUInt32(json);
}
if (typeof(ulong).IsAssignableFrom(typeof(T)))
{
return (T)(object)Convert.ToUInt64(json);
}
if (typeof(sbyte).IsAssignableFrom(typeof(T)))
{
return (T)(object)Convert.ToSByte(json);
}
if (typeof(IConvertible[]).IsAssignableFrom(typeof(T)) || typeof(IEnumerable).IsAssignableFrom(typeof(T)))
{
if (!json.Contains("["))
{
return Parse<T>(ToJsonString(json.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)));
}
}
if (settings == null)
{
return JsonConvert.DeserializeObject<T>(json);
}
return JsonConvert.DeserializeObject<T>(json, settings);
}
/// <summary>
/// 优化对字符串等基本数据类型和空指针的支持
/// </summary>
/// <param name="obj"></param>
/// <param name="formatting"></param>
/// <param name="settings"></param>
/// <returns></returns>
public static string ToJsonString(object obj, Formatting formatting = Formatting.None, JsonSerializerSettings settings = null)
{
if (obj == null)
{
return string.Empty;
}
if (obj is string)
{
return obj as string;
}
if (typeof(IConvertible).IsAssignableFrom(obj.GetType()))
{
return Convert.ToString(obj);
}
if (settings == null)
{
return JsonConvert.SerializeObject(obj, formatting);
}
return JsonConvert.SerializeObject(obj, formatting, settings);
}
public static T[] ListToArray<T>(IList<T> list)
{
if (list == null || list.Count < 1)
{
return new T[0];
}
T[] arr = new T[list.Count];
for (int i = 0; i < arr.Length; i++)
{
arr[i] = list[i];
}
return arr;
}
public static IList<T> ArrayToList<T>(T[] arr)
{
IList<T> list = new List<T>();
if (arr == null)
{
return list;
}
for (int i = 0; i < arr.Length; i++)
{
list.Add(arr[i]);
}
return list;
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架