每个人都有自己的知识体系。
Toggle navigation
Home
随笔
C#/.Net
树莓派 / Raspberry
皓月汉化组
Beego
Golang
OxideMod
apache
haproxy
windows
Java
Objective-C
日语/罗马音歌词/日语常识
MongoDB
python
电学
公告
Minecraft服务器-公告
NanoPi
C4D (CINEMA 4D)
生活
推流/m3u8/rtmp/rtsp
Unity3d
ffmpeg
数据结构
区块链
tarui
UnityForPSVita
About Me
Archives
Tags
完美解决 使用C#反射机制 实现复杂实体类、遍历递归、替换Null值属性参数、且高效率
2017-05-28 18:00:47
419
0
0
akiragatsu
网上也有很多朋友遇到这种问题 做服务端的盆友、要求给APP端的数据 不要带Null、 APP端处理麻烦 且不是过滤Null属性、需要保留字段、Null给成空字符串。 或者做其他你需要的自定义的处理 比如直接全局Json 序列化 性别 成 “汉子”“妹子” 全局区别数据格式对应不同平台等, 等高级DIV序列化方式 有些朋友、使用在实体类去标记初始值的方式。 有些朋友、使用重写Json.Net/Newtonsoft.Json的方法 还有些朋友、用其他的方式、 但是效率、以及方不方便上 不是很理想和实用 所以还是用反射实现好了、效率上也比较理想, 完美递归复杂实体类之后、再进行Json序列化、 实验证明这样达到目的效率更高、 方式最终精简如下 By 皓月 范例如下: public static T MySet<T>(T newi) { var t1 = newi.GetType();// //typeof(Class) //获取类型的类型 var t1Properties = t1.GetProperties(); //属性集合 //var t1Members = t1.GetMembers();//成员 字段 //var t1m = t1.GetMethods();//类型的方法的类型 //t1.GetEvents();//类型的事件 foreach (var t in t1Properties)//遍历属性 { Type t_type = t.GetType(); object t_Value = t.GetValue(newi, null); if (t_Value == null)//判断是否为空 { //此处添加任何你需要的自定处理 if (t.PropertyType == typeof(string)) { t.SetValue(newi, "", null); } if (t.PropertyType == typeof(Nullable<int>)) { t.SetValue(newi, 0, null); } if (t.PropertyType.Name.StartsWith("List`1")) t.SetValue(newi, Activator.CreateInstance(t.PropertyType), null); } else { if (t.PropertyType.Name.StartsWith("List`1")) { //此处添加任何你需要的自定处理 System.Collections.ICollection Ilist = t_Value as System.Collections.ICollection; foreach (var v in Ilist) { MySet(v); } } } } return newi; }
Pre:
Next:
皓月看过的番剧
0
likes
419
Weibo
Wechat
Tencent Weibo
QQ Zone
RenRen
Submit
Sign in
to leave a comment.
No Leanote account?
Sign up now.
0
comments
More...
Table of content
No Leanote account? Sign up now.