zoukankan      html  css  js  c++  java
  • C# Json 序列化大全--任我行

     public class JsonHelper
        {
            /// <summary>
            /// 将Model转换为Json字符串
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="obj"></param>
            /// <returns></returns>
            public static string GetJson<T>(T obj)
            {
                try
                {
                    DataContractJsonSerializer json = new DataContractJsonSerializer(typeof(T));
                    using (MemoryStream ms = new MemoryStream())
                    {
                        json.WriteObject(ms, obj);
                        string strJson = Encoding.UTF8.GetString(ms.ToArray());
    
                        string p = @"\/Date((d+)+d+)\/";
                        MatchEvaluator me = new MatchEvaluator(ConvertJsonDateToDateString);
                        Regex rg = new Regex(p);
                        strJson = rg.Replace(strJson, me);
                        return strJson;
                    }
                }
                catch (Exception ex)
                {
                    
                }
    
                return string.Empty;
            }
    
            /// <summary>
            /// 将Json字符串转换为Model
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="strJson"></param>
            /// <returns></returns>
            public static T ParseJson<T>(string strJson)
            {
                try
                {
                    string p = @"d{4}-d{2}-d{2}sd{2}:d{2}:d{2}[a-z,A-Z]";
                    MatchEvaluator me = new MatchEvaluator(ConvertDateTimeToJsonDate);
                    Regex rg = new Regex(p);
                    strJson = rg.Replace(strJson, me);
    
                    p = @"d{4}-d{2}-d{2}sd{2}:d{2}:d{2}";
                    me = new MatchEvaluator(ConvertDateTimeToJsonDate);
                    rg = new Regex(p);
                    strJson = rg.Replace(strJson, me);
    
                    using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(strJson)))
                    {
                        DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T));
                        T obj = (T)serializer.ReadObject(ms);
                        return obj;
                    }
                }
                catch (Exception ex)
                {
                   
                }
    
                return default(T);
            }
    
            /// <summary>
            /// 将Json序列化的时间由/Date(1294499956278+0800)转为字符串
            /// </summary>
            /// <param name="m"></param>
            /// <returns></returns>
            private static string ConvertJsonDateToDateString(Match m)
            {
                string result = string.Empty;
                DateTime dt = new DateTime(1970, 1, 1);
                dt = dt.AddMilliseconds(long.Parse(m.Groups[1].Value));
                dt = dt.ToLocalTime();
                result = dt.ToString("yyyy-MM-dd HH:mm:ss");
                return result;
            }
    
            /// <summary>
            /// 将时间字符串转化成json时间
            /// </summary>
            /// <param name="m"></param>
            /// <returns></returns>
            private static string ConvertDateTimeToJsonDate(Match m)
            {
                string result = string.Empty;
                DateTime dt = DateTime.Parse(m.Groups[0].Value);
                dt = dt.ToUniversalTime();
                TimeSpan ts = dt - DateTime.Parse("1970-01-01");
                result = string.Format("\/Date({0}+0800)\/", ts.TotalMilliseconds);
                return result;
            }
        }

    注:如果是要将Class类Json序列化时,在实体类上面和成员上面添加一个契约,和WCF 契约一样。
    举例如:

     /// <summary>
        /// 至爱甄选实体类
        /// </summary>
        [Serializable]
        [DataContract]
        public class FavoriteInfo
        {
            private int _id;
            private string _title;/// <summary>
            /// 至爱甄选Id
            /// </summary>
            [DataMember]
            public int Id
            {
                set { _id = value; }
                get { return _id; }
            }
    
             [DataMember]
            /// <summary>
            /// 标题
            /// </summary>
            public string Title
            {
                set { _title = value; }
                get { return _title; }
            }
    
    }

    调用方式如下:

    //获取数据集,返回List<FavoriteInfo>
                IList<FavoriteInfo> favoriteModelList = new PB.Favorite().GetFavoriteModelList(1, 1, "");
                if (favoriteModelList!=null && favoriteModelList.Count>0)
                {
                    string jsonString = JsonHelper.GetJson<IList<FavoriteInfo>>(favoriteModelList);
                    context.Response.Write(jsonString);
                }
  • 相关阅读:
    CSS之定位
    选择器小结
    ASP.NET Web API + Elasticsearch 6.x 快速做个全文搜索
    获取服务端https证书
    使用 JSON JavaScriptSerializer 进行序列化或反序列化时出错
    MVC和WebForm的优缺点比较
    C#之VS开发工具快捷键大全
    Scrum敏捷开发之扫盲篇
    Asp.net 中数据量较小插入数据库
    xml解析
  • 原文地址:https://www.cnblogs.com/xuyubing/p/3499583.html
Copyright © 2011-2022 走看看