using Newtonsoft.Json; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace MyCode.Project.Infrastructure.Common { public class JsonHelper { /// /// Json序列化器 /// static readonly JsonSerializer JsonSerializer = new JsonSerializer(); #region ToObject(将Json字符串转换为对象) /// /// 将Json字符串转换为对象 /// /// Json字符串 public static T ToObject(string json) { if (string.IsNullOrWhiteSpace(json)) return default(T); return JsonConvert.DeserializeObject(json); } #endregion #region ObjectToByte(将对象转换成字节数组) public static byte[] ObjectToByte(object obj) { var typeName = Reflection.GetTypeName(obj.GetType()); //if (typeName.IndexOf("System.String") != -1) { return System.Text.Encoding.Default.GetBytes(obj.ToString()); } using (var ms = new MemoryStream()) { using (var tw = new StreamWriter(ms)) { using (var jw = new JsonTextWriter(tw)) { jw.WriteStartArray();// [ jw.WriteValue(typeName);// "type" if (typeName.IndexOf("System.String") != -1) { jw.WriteValue(obj.ToString());// obj } else { JsonSerializer.Serialize(jw, obj);// obj } jw.WriteEndArray();// ] jw.Flush(); return ms.ToArray(); } } } } #endregion #region ToObject(字节数组转成对象) /// /// 反序列化对象 /// /// 值 /// public static object ToObject(byte[] value) { using (var ms = new MemoryStream(value, writable: false)) { using (var tr = new StreamReader(ms)) { using (var jr = new JsonTextReader(tr)) { jr.Read(); if (jr.TokenType == JsonToken.StartArray) { // 读取类型 var typeName = jr.ReadAsString(); var type = Type.GetType(typeName, throwOnError: true);// 获取类型 // 读取对象 jr.Read(); if (type.Name == "String") { return jr.Value; } return JsonSerializer.Deserialize(jr, type); } else if (jr.TokenType == JsonToken.StartObject) { return null; } else { throw new InvalidDataException("JsonTranscoder 仅支持 [\"TypeName\", object]"); } } } } } #endregion #region ToJson(将对象转换为Json字符串) /// /// 将对象转换为Json字符串 /// /// 目标对象 /// 是否将双引号转成单引号 public static string ToJson(object target, bool isConvertToSingleQuotes = false) { if (target == null) return "{}"; var result = JsonConvert.SerializeObject(target); if (isConvertToSingleQuotes) result = result.Replace("\"", "'"); return result; } #endregion } }