rt,我想知道C# 或者其扩展库中有没有C# 序列化的帮助类,使得他只序列化我需要的属性,而不是整个类的实例
已解决
/// <summary>
/// 将部分需要的属性值转json
/// </summary>
/// <typeparam name="T">要转化的类</typeparam>
/// <param name="t">要转化的实例</param>
/// <param name="jsonString">要转化的属性值</param>
/// <returns></returns>
public static string JsonSerializerListIgnoredNull<T>(List<T> t,string jsonString)
where T:new()
{
return JsonConvert.SerializeObject(TemporaryClass.GetObjectListUsefulProperties(t, jsonString), Formatting.Indented,
new JsonSerializerSettings {DefaultValueHandling = DefaultValueHandling.Ignore});
}
public static string JsonSerializerListIgnoredNull<T>(T t, string jsonString)
where T : new()
{
return JsonConvert.SerializeObject(TemporaryClass.GetObjectUsefulProperties(t, jsonString), Formatting.Indented,
new JsonSerializerSettings { DefaultValueHandling = DefaultValueHandling.Ignore });
}
/// <summary>
/// 获取一个类的需要的属性值
/// </summary>
/// <typeparam name="T">要处理的类型</typeparam>
/// <param name="obj"></param>
/// <param name="propertiesStr">使用时用'_'分开需要的属性值的各个属性名</param>
/// <returns></returns>
public static T GetObjectUsefulProperties<T>(T obj, string propertiesStr) where T : new()
{
string[] properties = propertiesStr.Split('_');
T returnObj = new T();
foreach (var propertyName in properties)
{
//将obj中的propertyName这个属性赋值到returnObj上;
returnObj.GetType().GetProperty(propertyName).SetValue(returnObj, obj.GetType().GetProperty(propertyName).GetValue(obj));
}
return returnObj;
}
/// <summary>
/// 获取一个List<类>的需要的各个类属性值
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="objs"></param>
/// <param name="propertiesStr">使用时用'_'分开需要的属性值的各个属性名</param>
/// <returns></returns>
public static List<T> GetObjectListUsefulProperties<T>(List<T> objs, string propertiesStr) where T : new()
{
var returnObjs = new List<T>();
foreach (var obj in objs)
{
returnObjs.Add(GetObjectUsefulProperties(obj, propertiesStr));
}
return returnObjs;
}
你可以new一个匿名类对象.只赋值你想要属性.
或者定义你的类型为可序列化类型.然后指定不序列化的成员.
后面一种方法可以麻烦些一个用例么,关于如何定义为可序列话类型和如何指定不序列化
@阿隐: 楼下那个连接里面就有代码了.不过我还是推荐使用匿名类.
如果你确定的知道哪些字段要序列化,那你可以再写一个映射类,
@吴瑞祥: 为什么是匿名类,好处在哪?
@吴瑞祥: 标志为Ignore 只是一次性标记,下次我可能又要这个属性了,除了这个方法和匿名方法还有其他的方法么。我想抽象出一个接口,然后动态的决定生成的json
http://james.newtonking.com/archive/2009/10/23/efficient-json-with-json-net-reducing-serialized-json-size
这里可能有你需要的答案。
thx
帮顶。
看你使用哪个序列化类库,一般都会有[Ignore]特性。