• Json的使用


      1 using System;
      2 using System.IO;
      3 using System.Text;
      4 using System.Text.RegularExpressions;
      5 using System.Runtime.Serialization.Json;
      6 using Newtonsoft.Json;
      7 using System.Collections.Generic;
      8 
      9 namespace TravelB2B.Core.Utils.Serializer
     10 {
     11     public class Json
     12     {
     13         public static string Serializer<T>(T t)
     14         {
     15             using (MemoryStream ms = new MemoryStream())
     16             {
     17                 DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
     18                 ser.WriteObject(ms, t);
     19 
     20                 string jsonString = Encoding.UTF8.GetString(ms.ToArray());
     21                 string p = @"\/Date((d+)+d+)\/";
     22                 MatchEvaluator matchEvaluator = new MatchEvaluator(ConvertJsonDateToDateString);
     23                 Regex reg = new Regex(p);
     24                 jsonString = reg.Replace(jsonString, matchEvaluator);
     25                 //如果是数组
     26 
     27                 if (jsonString.StartsWith("[") && jsonString.EndsWith("]"))
     28                 {
     29                     string name = t.GetType().Name;
     30                     if (t is System.Collections.ArrayList)
     31                     {
     32                         string[] arr = name.Split(new string[] { "[]" }, StringSplitOptions.None);
     33                         if (arr.Length > 0) name = arr[0] + "s";
     34                     }
     35                     else if (t is System.Collections.IList)
     36                     {
     37                         System.Collections.IList list = (System.Collections.IList)t;
     38                         if (list.Count > 0) name = list[0].GetType().Name + "s";
     39                     }
     40                     jsonString = "{"" + name + "":" + jsonString + "}";
     41                 }
     42                 return jsonString;
     43             }
     44         }
     45 
     46         public static T Deserialize<T>(string jsonString)
     47         {
     48             //将"yyyy-MM-dd HH:mm:ss"格式的字符串转为"/Date(1294499956278+0800)/"格式
     49             string p = @"d{4}-d{2}-d{2}sd{2}:d{2}:d{2}";
     50             MatchEvaluator matchEvaluator = new MatchEvaluator(ConvertDateStringToJsonDate);
     51             Regex reg = new Regex(p);
     52             jsonString = reg.Replace(jsonString, matchEvaluator);
     53             using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString)))
     54             {
     55 
     56                 DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
     57                 T obj = (T)ser.ReadObject(ms);
     58                 return obj;
     59             }
     60         }
     61 
     62         private static string ConvertJsonDateToDateString(Match m)
     63         {
     64             string result = string.Empty;
     65             DateTime dt = new DateTime(1970, 1, 1);
     66             dt = dt.AddMilliseconds(long.Parse(m.Groups[1].Value));
     67             dt = dt.ToLocalTime();
     68             result = dt.ToString("yyyy-MM-dd HH:mm:ss");
     69             return result;
     70         }
     71 
     72         private static string ConvertDateStringToJsonDate(Match m)
     73         {
     74             string result = string.Empty;
     75             DateTime dt = DateTime.Parse(m.Groups[0].Value);
     76             dt = dt.ToUniversalTime();
     77             TimeSpan ts = dt - DateTime.Parse("1970-01-01");
     78             result = string.Format("\/Date({0}+0800)\/", ts.TotalMilliseconds);
     79             return result;
     80         }
     81 
     82         /// <summary>
     83         /// 将对象序列化为JSON格式
     84         /// </summary>
     85         /// <param name="o">对象</param>
     86         /// <returns>json字符串</returns>
     87         public static string SerializeObject(object o)
     88         {
     89             string json = JsonConvert.SerializeObject(o);
     90             return json;
     91         }
     92 
     93         /// <summary>
     94         /// 解析JSON字符串生成对象实体
     95         /// </summary>
     96         /// <typeparam name="T">对象类型</typeparam>
     97         /// <param name="json">json字符串(eg.{"ID":"112","Name":"石子儿"})</param>
     98         /// <returns>对象实体</returns>
     99         public static T DeserializeJsonToObject<T>(string json) where T : class
    100         {
    101             JsonSerializer serializer = new JsonSerializer();
    102             StringReader sr = new StringReader(json);
    103             object o = serializer.Deserialize(new JsonTextReader(sr), typeof(T));
    104             T t = o as T;
    105             return t;
    106         }
    107 
    108         /// <summary>
    109         /// 解析JSON数组生成对象实体集合
    110         /// </summary>
    111         /// <typeparam name="T">对象类型</typeparam>
    112         /// <param name="json">json数组字符串(eg.[{"ID":"112","Name":"石子儿"}])</param>
    113         /// <returns>对象实体集合</returns>
    114         public static List<T> DeserializeJsonToList<T>(string json) where T : class
    115         {
    116             JsonSerializer serializer = new JsonSerializer();
    117             StringReader sr = new StringReader(json);
    118             object o = serializer.Deserialize(new JsonTextReader(sr), typeof(List<T>));
    119             List<T> list = o as List<T>;
    120             return list;
    121         }
    122 
    123         /// <summary>
    124         /// 反序列化JSON到给定的匿名对象.
    125         /// </summary>
    126         /// <typeparam name="T">匿名对象类型</typeparam>
    127         /// <param name="json">json字符串</param>
    128         /// <param name="anonymousTypeObject">匿名对象</param>
    129         /// <returns>匿名对象</returns>
    130         public static T DeserializeAnonymousType<T>(string json, T anonymousTypeObject)
    131         {
    132             T t = JsonConvert.DeserializeAnonymousType(json, anonymousTypeObject);
    133             return t;
    134         }
    135     }
    136 }
  • 相关阅读:
    MATLAB 2019a 安装包及安装教程
    三角形最大周长
    两数的和
    “精致”的数
    总分最高的学生姓名和各科成绩
    列表元素改写
    统计单词个数
    凯撒密码
    Django入门学习--配置路由(urls)
    Django入门学习--熟悉配置信息
  • 原文地址:https://www.cnblogs.com/hugeboke/p/11575196.html
Copyright © 2020-2023  润新知