• 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 }
  • 相关阅读:
    疫情环境下的网络学习笔记 python 5.8 数据库入门终章
    疫情环境下的网络学习笔记 python 5.7 navicat数据库,例题,sql注入
    疫情环境下的网络学习笔记 python 5.6 暂时看看
    疫情环境下的网络学习笔记 python 5.5 MYSql 表关系,外键
    疫情环境下的网络学习笔记 python 5.4 数据库基础
    疫情环境下的网络学习笔记 python 4.30 初识数据库
    疫情环境下的网络学习笔记 python 4.29 网络小项目
    XJOI 夏令营501-511测试11 游戏
    XJOI 夏令营501-511测试11 统计方案
    CF1197D Yet Another Subarray Problem
  • 原文地址:https://www.cnblogs.com/hugeboke/p/11575196.html
Copyright © 2020-2023  润新知