您的位置:首页 > Web前端 > JavaScript

如何Json序列化对象的部分属性

2016-05-31 00:00 441 查看
在用JSON序列化对象是,会返回这个对象的所有属性键值对,如果某个对象的属性非常多,但是我们需要获取的JSON数据只是其中的两三个属性,这样的情况,我们怎么优化呢?

具体实现方式

[code=language-cs]

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; }
}
}


调用

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

[code=language-cs]

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.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Json asp.net