using Newtonsoft.Json; using Newtonsoft.Json.Converters; using System; using System.IO; namespace WWPipeLine.Commons.SerializeHelper { /// /// 通用Json的序列化和反序列化 /// public class JsonHepler { private JsonHepler() { } /// /// 序列化为字符串 /// /// 需序列化的对象 /// public static string Json_SerializeObject(object obj) { return Json_SerializeObject(obj, false); } /// /// 带格式化的序列化 /// /// 需序列化的对象 /// 是否时间格式化 /// public static string Json_SerializeObject(object obj, bool isTimeFommat) { try { if (isTimeFommat) { var aIsoDateTimeConverter = new IsoDateTimeConverter { DateTimeFormat = "yyyy-MM-dd HH:mm:ss" }; return JsonConvert.SerializeObject(obj, Formatting.Indented, aIsoDateTimeConverter); } else { JsonSerializerSettings jsonSettings = new JsonSerializerSettings { DefaultValueHandling = DefaultValueHandling.Ignore, NullValueHandling = NullValueHandling.Ignore, ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore, TypeNameHandling = TypeNameHandling.Auto, MissingMemberHandling = MissingMemberHandling.Ignore, ObjectCreationHandling = ObjectCreationHandling.Reuse, PreserveReferencesHandling = PreserveReferencesHandling.None, MetadataPropertyHandling = MetadataPropertyHandling.Ignore, TypeNameAssemblyFormatHandling = TypeNameAssemblyFormatHandling.Simple, ConstructorHandling = ConstructorHandling.Default }; return JsonConvert.SerializeObject(obj, Formatting.Indented, jsonSettings); } } catch (Exception ex) { return string.Empty; } } /// /// 反序列化为指定对象 /// /// 反序列化的对象类型 /// 对象的Json字符串 /// public static T Json_DeserializeObject(string strSerializeJson) where T : class { try { return (T)JsonConvert.DeserializeObject(strSerializeJson, typeof(T)); } catch (Exception ex) { return default(T); } } /// /// 反序列化为指定对象 /// /// /// /// public static T Json_Deserialize(string strSerializeJson) { try { return (T)JsonConvert.DeserializeObject(strSerializeJson, typeof(T)); } catch (Exception ex) { return default(T); } } /// /// 序列化为Xml字符串 /// /// 需序列化的对象 /// public static string Json_SerializeObject_Xml(object obj) { string jsonData = Json_SerializeObject(obj, true); try { return JsonConvert.DeserializeXmlNode(jsonData).InnerXml.ToString(); } catch (Exception ex) { return string.Empty; } } /// /// Xml节点序列化为指定对象 /// /// 反序列化的对象类型 /// Xml的节点 /// public static T Json_DeserializeObject_Xml(System.Xml.XmlNode xmlNode) where T : class { string jsonData; try { jsonData = JsonConvert.SerializeXmlNode(xmlNode); } catch (Exception ex) { return default(T); } return Json_DeserializeObject(jsonData); } /// /// 序列化为文件 /// /// 序列化的文件名称:全路径 /// 需序列化的对象 /// public static bool SaveObjectInfoToFile(string path, object info) { using (StreamWriter sw = new StreamWriter(path)) { try { JsonSerializer serializer = new JsonSerializer(); JsonWriter writer = new JsonTextWriter(sw); serializer.Serialize(writer, info); writer.Close(); sw.Close(); return true; } catch { return false; } finally { sw.Close(); } } } /// /// 反序列化为对象 /// /// 反序列化的对象类型 /// 序列化的文件名称:全路径 /// public static T GetObjectInfoFromFile(string path) { using (StreamReader sr = new StreamReader(path)) { try { JsonSerializer serializer = new JsonSerializer(); JsonReader reader = new JsonTextReader(sr); return serializer.Deserialize(reader); } catch(Exception ex) { return default(T); } finally { sr.Close(); } } } /// /// JSon串转为对象 /// /// /// Json串 /// 对象类型 /// public static T GetObjectType(string infoJson, Type type) { try { var data = Commons.SerializeHelper.JsonHepler.Json_DeserializeObject(infoJson); JsonSerializer serializer = new JsonSerializer(); string jsonValue = JsonHepler.Json_SerializeObject(data, true); return (T)serializer.Deserialize(new JsonTextReader(new StringReader(jsonValue)), type); } catch { return default(T); } } } }