JSON字符串反序列化对象,对象序列化json,json转化为dynamic
来源:互联网 发布:吉翔数据 编辑:程序博客网 时间:2024/05/16 14:11
/* * json简单帮助工具类 * zhifeiya * 2015-2-2 */using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Runtime.Serialization;using System.Runtime.Serialization.Json;using System.IO;using System.Runtime.Serialization.Formatters.Binary;using System.Web.Script.Serialization;using System.Dynamic;using System.Collections;using System.Collections.ObjectModel;namespace Mvc.Util{ #region 【public】【JsonHelper】把具体的对象序列化json字符串,或者把json字符串反序列化为具体的对象 /// <summary> /// 把具体的对象序列化json字符串,或者把json字符串反序列化为具体的对象 /// </summary> public class JsonHelper { /// <summary> /// 从一个对象信息生成Json串 /// </summary> /// <param name="obj"></param> /// <returns></returns> public static string ObjectToJson(object obj) { DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType()); MemoryStream stream = new MemoryStream(); serializer.WriteObject(stream, obj); byte[] dataBytes = new byte[stream.Length]; stream.Position = 0; stream.Read(dataBytes, 0, (int)stream.Length); return Encoding.UTF8.GetString(dataBytes); } /// <summary> /// 从一个Json串生成对象信息 /// </summary> /// <param name="jsonString"></param> /// <param name="obj"></param> /// <returns></returns> public static object JsonToObject(string jsonString, object obj) { DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType()); MemoryStream mStream = new MemoryStream(Encoding.UTF8.GetBytes(jsonString.Trim())); return serializer.ReadObject(mStream); } /// <summary> /// 序列化 对象到字符串 /// </summary> /// <param name="obj">泛型对象</param> /// <returns>序列化后的字符串</returns> public static string Serialize<T>(T obj) { try { IFormatter formatter = new BinaryFormatter(); MemoryStream stream = new MemoryStream(); formatter.Serialize(stream, obj); stream.Position = 0; byte[] buffer = new byte[stream.Length]; stream.Read(buffer, 0, buffer.Length); stream.Flush(); stream.Close(); return Convert.ToBase64String(buffer); } catch (Exception ex) { throw new Exception("序列化失败,原因:" + ex.Message); } } /// <summary> /// 反序列化 字符串到对象 /// </summary> /// <param name="obj">泛型对象</param> /// <param name="str">要转换为对象的字符串</param> /// <returns>反序列化出来的对象</returns> public static T Desrialize<T>(T obj, string str) { try { obj = default(T); IFormatter formatter = new BinaryFormatter(); byte[] buffer = Convert.FromBase64String(str); MemoryStream stream = new MemoryStream(buffer); obj = (T)formatter.Deserialize(stream); stream.Flush(); stream.Close(); } catch (Exception ex) { throw new Exception("反序列化失败,原因:" + ex.Message); } return obj; } } #endregion #region 把json字符串转化为dynamic类型的对象 #region【public】【JsonToDynamic】把json字符串转化为dynamic类型的对象。注:为使用方便,对DynamicJsonConverter进行了包装 public class JsonToDynamic { public static dynamic GetDynamic(string json) { var serializer = new JavaScriptSerializer(); serializer.RegisterConverters(new[] { new DynamicJsonConverter() }); dynamic dy = serializer.Deserialize(json, typeof(object)); return dy; } } #endregion #region【private】【DynamicJsonConverter】 把json字符串转化为dynamic类型的对象 private class DynamicJsonConverter : JavaScriptConverter { public override object Deserialize(IDictionary<string, object> dictionary, Type type, JavaScriptSerializer serializer) { if (dictionary == null) throw new ArgumentNullException("dictionary"); return type == typeof(object) ? new DynamicJsonObject(dictionary) : null; } public override IDictionary<string, object> Serialize(object obj, JavaScriptSerializer serializer) { throw new NotImplementedException(); } public override IEnumerable<Type> SupportedTypes { get { return new ReadOnlyCollection<Type>(new List<Type>(new[] { typeof(object) })); } } #region Nested type: DynamicJsonObject private sealed class DynamicJsonObject : DynamicObject { private readonly IDictionary<string, object> _dictionary; public DynamicJsonObject(IDictionary<string, object> dictionary) { if (dictionary == null) throw new ArgumentNullException("dictionary"); _dictionary = dictionary; } public override string ToString() { var sb = new StringBuilder("{"); ToString(sb); return sb.ToString(); } private void ToString(StringBuilder sb) { var firstInDictionary = true; foreach (var pair in _dictionary) { if (!firstInDictionary) sb.Append(","); firstInDictionary = false; var value = pair.Value; var name = pair.Key; if (value is string) { sb.AppendFormat("{0}:\"{1}\"", name, value); } else if (value is IDictionary<string, object>) { new DynamicJsonObject((IDictionary<string, object>)value).ToString(sb); } else if (value is ArrayList) { sb.Append(name + ":["); var firstInArray = true; foreach (var arrayValue in (ArrayList)value) { if (!firstInArray) sb.Append(","); firstInArray = false; if (arrayValue is IDictionary<string, object>) new DynamicJsonObject((IDictionary<string, object>)arrayValue).ToString(sb); else if (arrayValue is string) sb.AppendFormat("\"{0}\"", arrayValue); else sb.AppendFormat("{0}", arrayValue); } sb.Append("]"); } else { sb.AppendFormat("{0}:{1}", name, value); } } sb.Append("}"); } public override bool TryGetMember(GetMemberBinder binder, out object result) { if (!_dictionary.TryGetValue(binder.Name, out result)) { // return null to avoid exception. caller can check for null this way... result = null; return true; } var dictionary = result as IDictionary<string, object>; if (dictionary != null) { result = new DynamicJsonObject(dictionary); return true; } var arrayList = result as ArrayList; if (arrayList != null && arrayList.Count > 0) { if (arrayList[0] is IDictionary<string, object>) result = new List<object>(arrayList.Cast<IDictionary<string, object>>().Select(x => new DynamicJsonObject(x))); else result = new List<object>(arrayList.Cast<object>()); } return true; } } #endregion } #endregion #endregion}
0 0
- JSON字符串反序列化对象,对象序列化json,json转化为dynamic
- 将对象转化为json格式 反序列化处理
- JSON 对象序列化、反序列化
- C#序列、反序列化json对象
- json字符串与json对象、json序列化与反序列化
- 将实体类或者集合序列化为JSON字符串,将JSON字符串反序列化还原为对象
- .net中反序列化json对象方法(使用Dynamic)
- c# 使用 Newtonsoft.Json 序列化json字符串以及,反序列化对象
- .NET JSON对象序列化和反序列化
- json.net 对象序列化和反序列化
- JSON序列化与反序列化对象
- JSON对象序列化与反序列化
- C# Json转对象 序列化 反序列化
- JSON时间对象序列化与反序列化<Timestamp>
- C# 对象JSON序列化与反序列化
- json字符串转化为对象
- .Net使用Newtonsoft.Json.dll(JSON.NET)对象序列化成json、反序列化json示例教程
- Python json 反序列化自定义对象
- Unity3D自动打包工具1
- android查看当前应用占用的内存空间
- PAT A 1006. Sign In and Sign Out (25)
- Level of measurement (Statistics) 计量尺度
- freemarker你需要了解的几件事
- JSON字符串反序列化对象,对象序列化json,json转化为dynamic
- 【SICP练习】104 练习3.1-3.4
- C++中随机函数rand()和srand()的用法
- pipe()
- IBM supervessel power云平台 之 linux系统下VPN 登录篇
- zoj_1188 DNA Sorting
- 理解extern "C",C++函数与C函数互调
- linux学习笔记:linux中文件的基本操作
- ios中json的四种解析方法