1、要序列化的类必须用 [DataContract] 特性标识

 
2、需要序列化的属性应用 [DataMember] 特性标识,没有该特性则表示不序列化该属性。类亦如此!
 
3、可以网络上找封装好的序列化类工具,也可以引用 System.json 程序集
 
 // /*---------------
// // 使用地方:eKing 警备系统 【终端和服务器之间的数据同步】
// //
// // 文件名:JsonUtils.cs
// // 文件功能描述:
// // 指定对象序列化成JSON
// // 将JSON反序列化成原对象
// // JsonUtils.Serialize(result); --- Serialize() 方法支持序列化(对象嵌套对象)的需求
// // 可直接调用Serialize()方法,可同时序列化指定对象包含的自定义对象,甚至List集合
// //
// // 创建标识:米立林20140319
// //
// // 修改标识:
// // 修改描述:
// //----------------------------------------------------------------*/
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.Serialization.Json;
using System.Text;
using System.Web.Script.Serialization;
namespace BJJDKJ.PEDIMS.SyncService
{
public class JsonUtils
{
// Methods
public static T Deserialize<T>(string json)
{
//将"yyyy-MM-dd HH:mm:ss"格式的字符串转为"\/Date(1294499956278+0800)\/"格式
string p = @"\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}";
MatchEvaluator matchEvaluator = new MatchEvaluator(ConvertDateStringToJsonDate);
Regex reg = new Regex(p);
json = reg.Replace(json, matchEvaluator);
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T));
using (MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(json)))
{
return (T)serializer.ReadObject(stream);
}
}
public static Dictionary<string, object> DeserializeDictionaryToJson(string json)
{
Dictionary<string, object> dictionary2;
JavaScriptSerializer serializer = new JavaScriptSerializer();
serializer.RegisterConverters(new Collection<JavaScriptConverter>());
dictionary2 = serializer.Deserialize<Dictionary<string, object>>(json);
return dictionary2;
}
public static T DeserializeEntityByBase64<T>(string json)
{
List<T> list = DeserializeListByBase64<T>(json);
if ((list != null) && (list.Count > ))
{
return list[];
}
T local = Deserialize<T>(json);
if (local != null)
{
PropertyInfo[] properties = local.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.IgnoreCase);
foreach (PropertyInfo info in properties)
{
if (info.PropertyType == typeof(string))
{
object obj2 = info.GetValue(local, null);
if (obj2 != null)
{
//info.SetValue(local, ConvertUtils.ConvertFromBase64String(obj2.ToString()), null);
info.SetValue(local, obj2.ToString(), null);
}
}
}
return local;
}
return default(T);
}
public static List<T> DeserializeListByBase64<T>(string json)
{
List<T> list = Deserialize<List<T>>(json);
if ((list != null) && (list.Count > ))
{
foreach (T local in list)
{
PropertyInfo[] properties = local.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.IgnoreCase);
foreach (PropertyInfo info in properties)
{
if (info.PropertyType == typeof(string))
{
object obj2 = info.GetValue(local, null);
if (obj2 != null)
{
info.SetValue(local, ConvertUtils.ConvertFromBase64String(obj2.ToString()), null);
}
}
}
}
}
return list;
}
public static string Serialize<T>(T data)
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(data.GetType());
using (MemoryStream stream = new MemoryStream())
{
serializer.WriteObject(stream, data);
string jsonStr = Encoding.UTF8.GetString(stream.ToArray());
//替换Json的Date字符串
//string p = @"/\//Date/((/d+)/+/d+/)/\//";
/*////Date/((([/+/-]/d+)|(/d+))[/+/-]/d+/)////*/
string p = @"\\/Date\((\d+)\+\d+\)\\/";
MatchEvaluator matchEvaluator = new MatchEvaluator(ConvertJsonDateToDateString);
Regex reg = new Regex(p);
jsonStr = reg.Replace(jsonStr, matchEvaluator);
return jsonStr;
}
}
public static string SerializeEntityByBase64<T>(T t)
{
List<T> list = new List<T> { t };
return SerializeListByBase64(list);
}
public static string SerializeJsonToDictionary(Dictionary<string, object> dic)
{
string str2;
JavaScriptSerializer serializer = new JavaScriptSerializer();
serializer.RegisterConverters(new Collection<JavaScriptConverter>());
str2 = serializer.Serialize(dic);
return str2;
}
public static string SerializeListByBase64<T>(List<T> list)
{
if ((list != null) && (list.Count > ))
{
foreach (T local in list)
{
PropertyInfo[] properties = local.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.IgnoreCase);
foreach (PropertyInfo info in properties)
{
if (info.PropertyType == typeof(string))
{
if (info.Name == "SIM_Police")
{
}
object obj2 = info.GetValue(local, null);
if (obj2 != null)
{
info.SetValue(local, ConvertUtils.ConvertToBase64String(obj2.ToString()), null);
}
}
}
}
return Serialize(list);
}
return "";
}
private static string WipeSpecialChar(string str)
{
StringBuilder builder = new StringBuilder();
for (int i = ; i < str.Length; i++)
{
char ch = str.ElementAt(i);
char ch2 = ch;
if (ch2 <= '\'')
{
switch (ch2)
{
case '\b':
{
builder.Append(@"\b");
continue;
}
case '\t':
{
builder.Append(@"\t");
continue;
}
case '\n':
{
builder.Append(@"\n");
continue;
}
case '\v':
goto Label_00C7;
case '\f':
{
builder.Append(@"\f");
continue;
}
case '\r':
{
builder.Append(@"\r");
continue;
}
case '\'':
goto Label_00B9;
}
goto Label_00C7;
}
if (ch2 != '/')
{
if (ch2 != '\\')
{
goto Label_00C7;
}
builder.Append(@"\\");
}
else
{
builder.Append(@"\/");
}
continue;
Label_00B9:
builder.Append(@"\'");
continue;
Label_00C7:
builder.Append(ch);
}
return builder.ToString();
}
/// <summary>
/// 将Json序列化的时间由/Date(1294499956278+0800)转为字符串
/// </summary>
private static string ConvertJsonDateToDateString(Match m)
{
string result = string.Empty;
DateTime dt = new DateTime(, , );
dt = dt.AddMilliseconds(long.Parse(m.Groups[].Value));
dt = dt.ToLocalTime();
result = dt.ToString("yyyy-MM-dd HH:mm:ss");
return result;
}
/// <summary>
/// 将时间字符串转为Json时间
/// </summary>
private static string ConvertDateStringToJsonDate(Match m)
{
string result = string.Empty;
DateTime dt = DateTime.Parse(m.Groups[].Value);
dt = dt.ToUniversalTime();
TimeSpan ts = dt - DateTime.Parse("1970-01-01");
result = string.Format("\\/Date({0}+0800)\\/", ts.TotalMilliseconds);
return result;
}
}
}

最新文章

  1. 验证radio 是否被选中
  2. VS快捷键大全(总结了一些记忆的口诀)
  3. C++ sizeof的使用总结
  4. Eclipse 卸载插件
  5. PL/SQL 基础编程
  6. 加载window事件
  7. 个人作业3——个人总结(Alphe)
  8. C# orderby子句
  9. asp.net core 2.0集成signalr
  10. [Spark内核] 第28课:Spark天堂之门解密
  11. FFmpeg libavutil主要功能概述
  12. 微信小程序之mpvue+iview踩坑之旅
  13. Centos6.5部署Sonar6.7.1备注
  14. 介绍Python中6个序列的内置类型
  15. mikrotik ros CVE-2019–3924 DUDE AGENT VULNERABILITY
  16. vs code 插件收集
  17. 前端学PHP之正则表达式函数
  18. Linux的文件的打包(tar方法)
  19. python中OS模块操作文件和目录
  20. .net 中两个日期算经过的月份数

热门文章

  1. Python 中的 -&gt; 是什么意思
  2. wordpress插件开发流程梳理-二
  3. Android Studio创建Module-库模块
  4. R-CNN论文学习
  5. ThinkPhp5 mongodb 使用自定义objectID出错解决
  6. 货币转换函数:CURRENCY_CONVERTING_FACTOR
  7. ubuntu 16.04 sudo nopasswd
  8. curl 的用法指南
  9. python安装pip方法
  10. iOS的多线程技术