XMLとJSONのシーケンス化およびDataTableのJSONへの移行

19304 ワード

using System.IO;

using System.Text;

using System.Xml.Serialization;

using System.Xml;

using System.Runtime.Serialization.Json;



namespace Common.Core

{

    public class SerializationHelper

    {

        private static string XmlSerialize(object o)

        {

            XmlSerializer ser = new XmlSerializer(o.GetType());

            System.IO.MemoryStream mem = new MemoryStream();

            XmlTextWriter writer = new XmlTextWriter(mem, Encoding.UTF8);

            XmlSerializerNamespaces ns = new XmlSerializerNamespaces();

            ns.Add("", "");

            ser.Serialize(writer, o, ns);

            writer.Close();

            return Encoding.UTF8.GetString(mem.ToArray());

        }



        private static T XmlDeserialize<T>(string s)

        {

            XmlDocument xdoc = new XmlDocument();

            try

            {

                xdoc.LoadXml(s);

                XmlNodeReader reader = new XmlNodeReader(xdoc.DocumentElement);

                XmlSerializer ser = new XmlSerializer(typeof(T));

                object obj = ser.Deserialize(reader);

                return (T)obj;

            }

            catch

            {

                return default(T);

            }

        }



        private static string JsonSerialize(object o)

        {

            using (var ms = new MemoryStream())

            {

                new DataContractJsonSerializer(o.GetType()).WriteObject(ms, o);

                return Encoding.UTF8.GetString(ms.ToArray());

            }

        }



        private static T JsonDeserialize<T>(string s)

        {

            using (var ms = new MemoryStream(Encoding.UTF8.GetBytes(s)))

            {

                return (T)new DataContractJsonSerializer(typeof(T)).ReadObject(ms);

            }

        }



        /// <summary>

        ///        (XML/JSON)         

        /// </summary>

        /// <param name="o">    </param>

        /// <param name="format">    </param>

        /// <returns></returns>

        public static string Serialize(object o, Format format)

        {

            if (format == Format.Xml)

            {

                return SerializationHelper.XmlSerialize(o);

            }

            else

            {

                return SerializationHelper.JsonSerialize(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)

        {

            if (format == Format.Xml)

            {

                return SerializationHelper.XmlDeserialize<T>(s);

            }

            else

            {

                return SerializationHelper.JsonDeserialize<T>(s);

            }

        }

    }

}

 
 
public class DataTableConvertJson

    {



        #region dataTable   Json  

        /// <summary>  

        /// dataTable   Json    

        /// </summary>  

        /// <param name="dt"></param>  

        /// <returns></returns>  

        public static string DataTable2Json(DataTable dt)

        {

            StringBuilder jsonBuilder = new StringBuilder();

            jsonBuilder.Append("{\"");

            jsonBuilder.Append(dt.TableName);

            jsonBuilder.Append("\":[");

            jsonBuilder.Append("[");

            for (int i = 0; i < dt.Rows.Count; i++)

            {

                jsonBuilder.Append("{");

                for (int j = 0; j < dt.Columns.Count; j++)

                {

                    jsonBuilder.Append("\"");

                    jsonBuilder.Append(dt.Columns[j].ColumnName);

                    jsonBuilder.Append("\":\"");

                    jsonBuilder.Append(dt.Rows[i][j].ToString());

                    jsonBuilder.Append("\",");

                }

                jsonBuilder.Remove(jsonBuilder.Length - 1, 1);

                jsonBuilder.Append("},");

            }

            jsonBuilder.Remove(jsonBuilder.Length - 1, 1);

            jsonBuilder.Append("]");

            jsonBuilder.Append("}");

            return jsonBuilder.ToString();

        }



        #endregion dataTable   Json  

        #region DataSet   Json  

        /// <summary>  

        /// DataSet   Json    

        /// </summary>  

        /// <param name="ds">DataSet</param> 

        /// <returns></returns>  

        public static string Dataset2Json(DataSet ds)

        {

            StringBuilder json = new StringBuilder();



            foreach (DataTable dt in ds.Tables)

            {

                json.Append("{\"");

                json.Append(dt.TableName);

                json.Append("\":");

                json.Append(DataTable2Json(dt));

                json.Append("}");

            } return json.ToString();

        }

        #endregion



        /// <summary>

        /// Msdn

        /// </summary>

        /// <param name="jsonName"></param>

        /// <param name="dt"></param>

        /// <returns></returns>

        public static string DataTableToJson(string jsonName, DataTable dt)

        {

            StringBuilder Json = new StringBuilder();

            Json.Append("{\"" + jsonName + "\":[");

            if (dt.Rows.Count > 0)

            {

                for (int i = 0; i < dt.Rows.Count; i++)

                {

                    Json.Append("{");

                    for (int j = 0; j < dt.Columns.Count; j++)

                    {

                        Json.Append("\"" + dt.Columns[j].ColumnName.ToString() + "\":\"" + dt.Rows[i][j].ToString() + "\"");

                        if (j < dt.Columns.Count - 1)

                        {

                            Json.Append(",");

                        }

                    }

                    Json.Append("}");

                    if (i < dt.Rows.Count - 1)

                    {

                        Json.Append(",");

                    }

                }

            }

            Json.Append("]}");

            return Json.ToString();

        }

    }

 
参照:http://www.cnblogs.com/ynbt/archive/2012/12/11/2813911.html