在用JSON序列化对象是,会返回这个对象的全部属性键值对,若是某个对象的属性很是多,可是咱们须要获取的JSON数据只是其中的两三个属性,这样的状况,咱们怎么优化呢?html
具体实现方式json
using System; using System.Collections.Generic; using System.Web.Script.Serialization; public class Person { public string Name { get; set; } public int Age { get; set; } public double Meney { get; set; } public double Tex { get; set; } public DateTime Berthday { get; set; } } /**//// <summary> ///简单实体 可变属性序列化器 /// </summary> 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; } } }
调用ide
在序列化一个对象时, 只序列化了咱们想要的两个属性, 实际对象有4个属性优化
public static void aaa() { var p = new Person { Age = 20, Name = "www.studyofnet.com", Meney = 3, Tex = 1}; var s = new PropertyVariableJsonSerializer(); string result = s.Serialize<Person>(p, new List<string>() { "Name", "Age" }); }
参考资料:如何Json序列化对象的部分属性 http://www.studyofnet.com/news/1234.htmlcode