json 序列化與反序列化C#類

m47c 9年前發布 | 5K 次閱讀 C#

添加System.runtime.serialization.dll引用

    public static class JsonSerializer
{
private static ITracing _tracing = TracingManager.GetTracing(typeof(JsonSerializer));

        /// <summary>  
        /// 將指定對象序列化為 JavaScript 對象表示法 (JSON) 數據,并將生成的 JSON 寫入流中。  
        /// </summary>  
        /// <typeparam name="T">對象類型</typeparam>  
        /// <param name="stream">流對象</param>  
        /// <param name="obj">序列化對象</param>  
        public static void Serialize<T>(Stream stream, T obj)  
        {  
            JsonSerializeProxy<T>.Default.Serialize(stream, obj);  
        }  


        /// <summary>  
        /// 將指定對象序列化為 JavaScript 對象表示法 (JSON) 數據,并返回對應的字符串。  
        /// </summary>  
        /// <typeparam name="T">對象類型</typeparam>  
        /// <param name="obj">序列化對象</param>  
        /// <returns>JavaScript 對象表示法 (JSON) 字符串</returns>  
        public static string Serialize<T>(T obj)  
        {  
            using (MemoryStream ms = new MemoryStream())  
            {  
                JsonSerializeProxy<T>.Default.Serialize(ms, obj);  


                string jsonStr = Encoding.UTF8.GetString(ms.ToArray());  


                _tracing.InfoFmt("{0} json serialize result: {1}", typeof(T).ToString(), jsonStr);  


                return jsonStr;  
            }  
        }  


        public static T DeSerialize<T>(string jsonStr)  
        {  
            return JsonSerializeProxy<T>.Default.DeSerialize(jsonStr);  
        }  
    }  


    public class JsonSerializeProxy<T>  
    {  
        private static readonly JsonSerializeProxy<T> _default = new JsonSerializeProxy<T>();  
        private DataContractJsonSerializer _serializer;  


        public static JsonSerializeProxy<T> Default  
        {  
            get  
            {  
                return _default;  
            }  
        }  


        private JsonSerializeProxy()  
        {  
            _serializer = new DataContractJsonSerializer(typeof(T));  
        }  


        public void Serialize(Stream stream, T obj)  
        {  
            _serializer.WriteObject(stream, obj);  
        }  


        /// <summary>  
        /// 將JSON字符串反序列化為對象  
        /// </summary>  
        /// <param name="jsonStr">json字符串</param>  
        /// <returns></returns>  
        public T DeSerialize(string jsonStr)  
        {  
            MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonStr));  
            T obj = (T)_serializer.ReadObject(ms);  
            return obj;  
        }  


    }  </pre> 


 本文由用戶 m47c 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!