C# json 序列化 匿名对象序列号 指定对象序列化
来源:互联网 发布:h.323端口 编辑:程序博客网 时间:2024/06/03 16:36
一、序列化
通常我们返回json对象给客户端,需要新建一个类,因为有些数据对方是不需要,
就像一个类Person,里面有字段Name、Photo,而对方有要Photo也有不要Photo的,这个时候我们通过序列化 类指定
1.引入System.Web.Extensions
2.
var p = new Person { Name = "yc的客户", Photo = "hahaahh" }; var s = new PropertyVariableJsonSerializer(); string result1 = s.Serialize<Person>(p, new List<string>() { "Name" }); string result2 = s.Serialize<Person>(p, new List<string>() { "Name", "Photo" }); Console.WriteLine(result1); Console.WriteLine(result2); Console.ReadLine();
public class Person { public string Name { get; set; } public string Photo { get; set; } }
通用方法
public class PropertyVariableJsonSerializer { readonly System.Web.Script.Serialization.JavaScriptSerializer _serializer = new JavaScriptSerializer(); /**/ /// <summary> /// json 序列化 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="obj"></param> /// <param name="propertys"></param> /// <returns></returns> public string Serialize<T>(T obj, List<string> propertys) { _serializer.RegisterConverters(new[] { new PropertyVariableConveter(typeof(T), propertys) }); return _serializer.Serialize(obj); } } public class PropertyVariableConveter : JavaScriptConverter { private readonly List<Type> _supportedTypes = new List<Type>(); public PropertyVariableConveter(Type supportedType, List<string> propertys) { _supportedTypes.Add(supportedType); Propertys = propertys; } private List<string> Propertys { get; set; } public override object Deserialize(IDictionary<string, object> dictionary, Type type, JavaScriptSerializer serializer) { throw new Exception(" 这个暂时不支持 , 谢谢 "); } public override IDictionary<string, object> Serialize(object obj, JavaScriptSerializer serializer) { var dic = new Dictionary<string, object>(); var t = obj.GetType(); var properties = t.GetProperties(); foreach (var ite in properties) { string key = ite.Name; var v = t.GetProperty(key).GetValue(obj, null); if (Propertys == null || Propertys.Count <= 0) { dic.Add(key, v); continue; } if (Propertys.Contains(key)) { dic.Add(key, v); } } return dic; } public override IEnumerable<Type> SupportedTypes { get { return _supportedTypes; } } }
二、反序列化
我们获取了一个json,但是我们不想写类,这个时候我能就可以使用
引入Newtonsoft.Json;
var p = new Person { Name = "yc的客户", Photo = "hahaahh" }; var s = new PropertyVariableJsonSerializer(); string result1 = s.Serialize<Person>(p, new List<string>() { "Name" }); string result2 = s.Serialize<Person>(p, new List<string>() { "Name", "Photo" }); var jo2 = JsonConvert.DeserializeObject<dynamic>(result2); Console.WriteLine(jo2.Name);
阅读全文
0 0
- C# json 序列化 匿名对象序列号 指定对象序列化
- 序列化匿名对象
- C#序列化匿名对象为XML
- C#序列、反序列化json对象
- C#对象序列化
- C#对象序列化
- C#对象序列化
- 序列化对象--C#
- C#对象序列化
- c#对象序列化
- C# Json转对象 序列化 反序列化
- C# 对象JSON序列化与反序列化
- c# Json 序列化后转化为对象类集合
- C# 对象XML序列化
- C# 对象二进制序列化
- C#对象序列化详解
- 黑马程序员-----IO之对象序列化Externalizable与序列号
- Newtonsoft.Json 使用 C#序列号json,反序列化对象
- Android四大组件之Service
- Android 大小两个Surface切换
- hibernate配置
- 机器学习(5)Bagging和Boosting 概念及区别
- IntelliJ Idea 常用快捷键列表
- C# json 序列化 匿名对象序列号 指定对象序列化
- STM32L152 基本定时器使用学习
- 【论文阅读笔记】Deepr: A Convolutional Net for Medical Records
- VisualSVN Server的配置和使用方法【服务器端】
- 【C/C++】嵌套类
- Java Web技术内幕笔记-DNS解析
- luogu P1192 台阶问题
- MySQL--基础命令
- Allocate exception for servlet XXX 基本异常