- using System.IO;
- using System.Text;
- using System.Xml.Serialization;
- using System.Xml;
- using System.Runtime.Serialization.Json;
- using System;
- namespace cn.ava.PublicsUtil.Util
- {
- /// <summary>
- /// 創建人Rex.liu
- /// 創建時間:2015年9月6日 14:48:29
- /// 功能:序列化反序列化XML文件
- /// </summary>
- public class JsonAndXmlSerialization
- {
- /// <summary>
- /// 將對象根據格式(XML/JSON)序列化成字符串結果
- /// </summary>
- /// <param name="o">目標對象</param>
- /// <param name="format">輸出格式</param>
- /// <returns></returns>
- public static string Serialize(object o, string format)
- {
- if (format.ToLower() == "xml")
- {
- return JsonAndXmlSerialization.XmlSerialize(o);
- }
- else
- {
- return JsonAndXmlSerialization.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, string format)
- {
- if (format.ToLower() == "xml")
- {
- return JsonAndXmlSerialization.XmlDeserialize<T>(s);
- }
- else
- {
- return JsonAndXmlSerialization.JsonDeserialize<T>(s);
- }
- }
- /// <summary>
- /// 對象序列化成文件並保存
- /// </summary>
- /// <typeparam name="T">對象類型</typeparam>
- /// <param name="t">對象實體</param>
- /// <param name="path">文件路徑</param>
- /// <param name="format">格式:json或 xml</param>
- /// <returns></returns>
- public static bool SerializableFile<T>(object t, string path, string format)
- {
- if (format.ToLower() == "xml")
- {
- return JsonAndXmlSerialization.SerializableXML<T>(t, path);
- }
- else
- {
- return JsonAndXmlSerialization.SerializableJson<T>(t, path);
- }
- }
- /// <summary>
- /// 將文件反序列化成對象
- /// </summary>
- /// <typeparam name="T">對象類型</typeparam>
- /// <param name="path">文件路徑</param>
- /// <param name="format">格式: json 或 xml</param>
- /// <returns></returns>
- public static T DeserializeFile<T>(string path, string format)
- {
- if (format.ToLower() == "xml")
- {
- return JsonAndXmlSerialization.DeSerializableXML<T>(path);
- }
- else
- {
- return JsonAndXmlSerialization.DeSerializableJson<T>(path);
- }
- }
- /// <summary>
- /// 將object對象序列化成XML
- /// </summary>
- /// <param name="o"></param>
- /// <returns></returns>
- 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());
- }
- /// <summary>
- /// 字符串反序列化成對象
- /// </summary>
- /// <typeparam name="T">對象類型</typeparam>
- /// <param name="s">XML值</param>
- /// <returns></returns>
- 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);
- }
- }
- /// <summary>
- /// 對象序列化成Json字符串
- /// </summary>
- /// <param name="o"></param>
- /// <returns></returns>
- private static string JsonSerialize(object o)
- {
- using (var ms = new MemoryStream())
- {
- new DataContractJsonSerializer(o.GetType()).WriteObject(ms, o);
- return Encoding.UTF8.GetString(ms.ToArray());
- }
- }
- /// <summary>
- /// Json字符串反序列化成對象
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <param name="s"></param>
- /// <returns></returns>
- 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>
- /// 將對象保存爲json文件
- /// </summary>
- /// <typeparam name="T">對象類型</typeparam>
- /// <param name="t">對象</param>
- /// <param name="path">保存路徑</param>
- /// <returns></returns>
- private static bool SerializableJson<T>(object t, string path)
- {
- bool bl = false;
- try
- {
- string strjson = JsonSerialize(t);
- System.IO.StreamWriter sw = System.IO.File.CreateText(path);
- sw.WriteLine(strjson);
- sw.Close();
- }
- catch
- {
- return bl;
- }
- return true;
- }
- /// <summary>
- /// 將對象序列化成XML並保存到文件
- /// </summary>
- /// <returns></returns>
- private static bool SerializableXML<T>(object t, string path)
- {
- bool bl = false;
- FileStream fileStream = null;
- try
- {
- if (t != null)
- {
- //創建xml格式器
- XmlSerializer xmls = new XmlSerializer(typeof(T));
- //創建文件流
- fileStream = new FileStream(path, FileMode.Create);
- //將對象序列化到流
- xmls.Serialize(fileStream, t);
- bl = true;
- }
- }
- catch (Exception ex)
- {
- throw ex;
- }
- finally
- {
- if (fileStream != null)
- {
- fileStream.Close();
- }
- }
- return bl;
- }
- /// <summary>
- /// 將文件反序列化json
- /// </summary>
- /// <typeparam name="T">類型</typeparam>
- /// <param name="path">json所存放的路徑</param>
- /// <returns>實體</returns>
- private static T DeSerializableJson<T>(string path)
- {
- T t = default(T);
- try
- {
- FileInfo fi = new FileInfo(path);
- if (fi.Exists)
- {
- StreamReader sr = new StreamReader(path, Encoding.UTF8);
- String line;
- StringBuilder strcontent = new StringBuilder();
- while ((line = sr.ReadLine()) != null)
- {
- strcontent.Append(line.ToString());
- }
- t = JsonAndXmlSerialization.JsonDeserialize<T>(strcontent.ToString());
- }
- }
- catch (Exception ex)
- {
- throw ex;
- }
- return t;
- }
- /// <summary>
- /// 將文件反序列化XML
- /// </summary>
- /// <typeparam name="T">類型</typeparam>
- /// <param name="path">XMl所存放的路徑</param>
- /// <returns>實體</returns>
- private static T DeSerializableXML<T>(string path)
- {
- T t = default(T);
- FileStream fileStream = null;
- try
- {
- XmlSerializer xmls = new XmlSerializer(typeof(T));
- FileInfo fi = new FileInfo(path);
- if (fi.Exists)
- {
- fileStream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read);
- t = (T)xmls.Deserialize(fileStream);
- }
- }
- catch (Exception ex)
- {
- throw ex;
- }
- finally
- {
- if (fileStream != null)
- {
- fileStream.Close();
- }
- }
- return t;
- }
- }
- }
C#序列化與反序列化對象XML和JSON 詳細代碼工具
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.