using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Collections; using System.Web.Script.Serialization; using System.Xml; using System.Xml.Serialization; using System.IO; using System.ComponentModel; namespace Ant.Common { /// <summary> /// JSON,XML和实体相互转换 /// </summary> public class SerializationHelper { /// <summary> /// 将对象根据格式(XML/JSON)序列化成字符串结果 /// </summary> /// <param name="o">目标对象</param> /// <param name="format">输出格式</param> /// <returns></returns> public static string Serialize(object o, Format format) { return format == Format.Xml ? XmlSerialize(o) : ObjectToJson(o); } /// <summary> /// 将字符串根据格式(XML/JSON)反序列化成指定类型的对象 /// </summary> /// <typeparam name="T">指定类型</typeparam> /// <param name="s">目标字符串</param> /// <param name="format">输入格式</param> /// <returns></returns> public static T Deserialize<T>(string s, Format format) { return format == Format.Xml ? XmlDeserial<T>(s) : JsonToObject<T>(s); } /// <summary> /// XML转实体 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="xml"></param> /// <returns></returns> public static T XmlDeserialize<T>(string xml) { return XmlDeserial<T>(xml); } /// <summary> /// 对象转JSON /// </summary> /// <param name="obj">对象</param> /// <returns>JSON格式的字符串</returns> private static string ObjectToJson(object obj) { var jss = new JavaScriptSerializer(); try { return jss.Serialize(obj); } catch (Exception ex) { throw new Exception("JSONHelper.ObjectToJSON(): " + ex.Message); } } /// <summary> /// 实体转成XML格式 /// </summary> /// <param name="o"></param> /// <returns></returns> private static string XmlSerialize(object o) { using (var ms = new MemoryStream()) { var serializer = new XmlSerializer(o.GetType()); serializer.Serialize(ms, o); ms.Seek(0, SeekOrigin.Begin); using (var reader = new StreamReader(ms, Encoding.UTF8)) { return reader.ReadToEnd(); } } } /// <summary> /// JSON转实体 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="jsonText"></param> /// <returns></returns> private static T JsonToObject<T>(string jsonText) { var jss = new JavaScriptSerializer(); try { return !string.IsNullOrEmpty(jsonText) ? jss.Deserialize<T>(jsonText) : default(T); } catch (Exception ex) { throw new Exception("JSONToObject(): " + ex.Message); } } /// <summary> /// XML转实体 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="s"></param> /// <returns></returns> private static T XmlDeserial<T>(string s) { var xdoc = new XmlDocument(); try { string str = "<?xml version='1.0' encoding='utf-8'?><AppSettings>" + s + "</AppSettings>"; xdoc.LoadXml(str); if (xdoc.DocumentElement != null) { var reader = new XmlNodeReader(xdoc.DocumentElement); var ser = new XmlSerializer(typeof(T)); var obj = ser.Deserialize(reader); return (T)obj; } } catch (Exception ex) { return default(T); } return default(T); } /// <summary> /// JOSN数据过滤 /// </summary> /// <param name="s"></param> /// <returns></returns> public static string stringToJson(string s) { //Microsoft.JScript.GlobalObject.escape(strJS); string sb = ""; sb=s.Replace("/", "\\/"); sb = sb.Replace("\"", "\\\""); sb = sb.Replace("\b", "\\b"); sb = sb.Replace("\f", "\\f"); sb = sb.Replace("\n", "\\n"); sb = sb.Replace("\r", "\\r"); sb = sb.Replace("\t", "\\t"); return sb; } } public enum Format { [Description("Xml")] Xml = 1, [Description("Json")] Json = 2 } }