VJsonSerializer.cs 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. using Newtonsoft.Json;
  2. using System;
  3. namespace VCommon.Json
  4. {
  5. public class VJsonSerializer : IVJsonSerializer
  6. {
  7. private readonly JsonSerializerSettings _settings; //TODO: 改用 JsonSerializer 实例节省每次创建开销
  8. public VJsonSerializer(JsonSerializerSettings settings) => _settings = settings;
  9. /// <summary> 反序列化: 如果传入json为null则返回T的默认值 </summary>
  10. public T DeserializeObject<T>(string json)
  11. => json == null
  12. ? default(T)
  13. : JsonConvert.DeserializeObject<T>(json, _settings);
  14. /// <summary> 反序列化匿名类型: 如果传入json为null则返回T的默认值 </summary>
  15. public T DeserializeAnonymousTypeObject<T>(string json, T anon = default(T))
  16. => json == null
  17. ? default(T)
  18. : JsonConvert.DeserializeAnonymousType(json, anon, _settings);
  19. /// <summary> 反序列化: 按指定类型, 如果传入的json为null则返回该类型的默认值 </summary>
  20. public object DeserializeObject(string json, Type type)
  21. => json == null
  22. ? (type.IsValueType ? Activator.CreateInstance(type) : null)
  23. : JsonConvert.DeserializeObject(json, type, _settings);
  24. /// <summary> 序列化 </summary>
  25. public string SerializeObject(object obj) => JsonConvert.SerializeObject(obj, _settings);
  26. //static shortcut
  27. private static readonly JsonSerializerSettings IgnoreNullSettings = new JsonSerializerSettings
  28. {
  29. NullValueHandling = NullValueHandling.Ignore,
  30. };
  31. private static readonly JsonSerializerSettings IncludeNullSettings = new JsonSerializerSettings
  32. {
  33. NullValueHandling = NullValueHandling.Include,
  34. };
  35. public static readonly VJsonSerializer IgnoreNullSerializer = new VJsonSerializer(IgnoreNullSettings);
  36. public static readonly VJsonSerializer IncludeNullSerializer = new VJsonSerializer(IncludeNullSettings);
  37. public static readonly VJsonSerializer DefaultSerializer = IgnoreNullSerializer;
  38. /// <summary> 反序列化: 如果传入json为null则返回T的默认值 </summary>
  39. public static T Deserialize<T>(string json)
  40. => json == null
  41. ? default(T)
  42. : DefaultSerializer.DeserializeObject<T>(json);
  43. /// <summary> 反序列化匿名类型: 如果传入json为null则返回T的默认值 </summary>
  44. public T DeserializeAnonymousType<T>(string json, T anon = default(T))
  45. => json == null
  46. ? default(T)
  47. : DefaultSerializer.DeserializeAnonymousTypeObject(json, anon);
  48. /// <summary> 反序列化: 按指定类型, 如果传入的json为null则返回该类型的默认值 </summary>
  49. public static object Deserialize(string json, Type type)
  50. => json == null
  51. ? (type.IsValueType ? Activator.CreateInstance(type) : null)
  52. : DefaultSerializer.DeserializeObject(json, type);
  53. /// <summary> 序列化, 包括值为null的成员 </summary>
  54. public static string SerializeIncludeNull(object obj) => DefaultSerializer.SerializeObject(obj);
  55. /// <summary> 序列化, 忽略值为null的成员, 节省空间 </summary>
  56. public static string Serialize(object obj) => DefaultSerializer.SerializeObject(obj);
  57. }
  58. }