您的位置:首页 > 编程学习 > ASP.NET > 正文

Json序列化对象的部分属性值

更多 时间:2016-4-29 类别:编程学习 浏览量:463

Json序列化对象的部分属性值

Json序列化对象的部分属性值

在用JSON序列化对象是,会返回这个对象的所有属性键值对,如果某个对象的属性非常多,但是我们需要获取的JSON数据只是其中的两三个属性,这样的情况,我们怎么优化呢?下面介绍一种简单的方法

 

一、效果如图

 

在序列化一个对象时, 只序列化了我们想要的两个属性,  实际对象有4个属性

 

二、具体实现方式

 

  •  
  • C# 代码   复制
  • 
        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; }
            }
        }
    
    
        
    		
  •  

     

    三、调用

     

  •  
  • C# 代码   复制
  • 
            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