WebApi系列~按需序列化字段~Hot
起初只是一个想法,一次讨论,一个设想,但相信一定可以实现,具体的事情是这样的,有个对外的API项目,它为一些终端设备提供数据,如手机,平板,PC,当然你也可以说它为很多平台提供数据win32,mac,ios,android,对于PC设备来说,接口返回的数据量当然没有那么敏感,但对于移动设备,对这点要求就高些,不需要的数据请不要为我返回,因为那么会发费我很多流量!
是的,这是2010年到未来某个时期的热门话题,网络带宽是收费的,不要随便浪费!
第一次想法失败了
终端-〉请求数据包-〉服务端接口接改并处理-〉数据返回并过滤无用字段
这个模型在我的大脑里呈现,但经过实践的证明,很遗憾,它是无法实现的,因为你不能为每个属性动态去添加一种叫做JsonIgnore的特性(不会被序列化),因为这种特性属于一种元信息,我们在程序运行时,只能获取它,设置它的值,而不能添加或者移除它(反射),当然,你可以从新动态创建一个类,一个类的方法和属性(Emit)
第二次想法成功了
数据层和业务层在服务端去干自己的事,返回自己完整的数据吧,我不去关心它,我关心的是在API返回数据时的动作(序列化),所以第二次想法出来了,将实体对象在进行JSON序列化时进行加工,将不需要的字段从JSON字符串中去掉,就OK了,注意本代码只是第一版,目前还不支持JSON的嵌套属性,这个递归我打算在第二版再实现它,呵呵,不想让它太复杂!
下面是我的代码
/// <summary>
/// 功能:集合按需要序列化
/// author:仓储大叔
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="list"></param>
/// <param name="fun"></param>
/// <returns></returns>
public static string ToJson(this object type, params string[] param)
{
StringBuilder buffer = new StringBuilder();
if (type.GetType().Name == "List`1")
{
buffer.Insert(, "[");
foreach (var t in (IEnumerable<object>)type)
{
GeneratorJsonStr(buffer, t, param);
}
buffer.Append("]");
}
else
{
GeneratorJsonStr(buffer, type, param);
}
return buffer.ToString();
}
/// <summary>
/// 为对象生成Json字符串
/// </summary>
/// <param name="buffer"></param>
/// <param name="t"></param>
/// <param name="param"></param>
static void GeneratorJsonStr(StringBuilder buffer, object t, params string[] param)
{
var obj = new List<string>();
foreach (var item in param)
{
var p = t.GetType().GetProperty(item, BindingFlags.Public | BindingFlags.Instance | BindingFlags.IgnoreCase);
if (p != null)
{
if (p.PropertyType == typeof(string))
obj.Add(p.Name + ":\"" + p.GetValue(t) + "\"");
else
obj.Add(p.Name + ":" + p.GetValue(t));
}
}
if (obj.Count > )
buffer.Append("{" + string.Join(",", obj) + "}");
}
感谢您的阅读!
WebApi系列~按需序列化字段~Hot的更多相关文章
- WebApi系列~目录
回到占占推荐博客索引 写了这个系列的文章不少了,也应该为大家写个目录了,最近很刮了很多SOA的风,很多企业都将自己的系统进行分割,通常是按模块进行拆分,为这个模块提供统一的接口提供业务服务,这不紧可以 ...
- 【WebApi系列】详解WebApi如何传递参数
WebApi系列文章 [01]浅谈HTTP在WebApi开发中的运用 [02]聊聊WebApi体系结构 [03]详解WebApi参数的传递 [04]详解WebApi测试和PostMan [05]浅谈W ...
- 【WebApi系列】浅谈HTTP
[01]浅谈HTTP在WebApi开发中的运用 [02]聊聊WebApi体系结构 [03]详解WebApi如何传递参数 [04]详解WebApi测试和PostMan [05]浅谈WebApi Core ...
- 【WebApi系列】浅谈HTTP在WebApi开发中的运用
WebApi系列文章 [01]浅谈HTTP在WebApi开发中的运用 [02]聊聊WebApi体系结构 [03]详解WebApi参数的传递 [04]详解WebApi测试和PostMan [05]浅谈W ...
- MS SQL巡检系列——检查外键字段是否缺少索引
前言感想:一时兴起,突然想写一个关于MS SQL的巡检系列方面的文章,因为我觉得这方面的知识分享是有价值,也是非常有意义的.一方面,很多经验不足的人,对于巡检有点茫然,不知道要从哪些方面巡检,另外一方 ...
- Http下的各种操作类.WebApi系列~通过HttpClient来调用Web Api接口
1.WebApi系列~通过HttpClient来调用Web Api接口 http://www.cnblogs.com/lori/p/4045413.html HttpClient使用详解(java版本 ...
- 学习ASP.NET Core Razor 编程系列十一——把新字段更新到数据库
学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...
- 反射序列化字段的时候,需要添加[Datamember]不然会,忽略这个字段
反射序列化字段的时候,需要添加[Datamember]不然会,忽略这个字段
- WebApi系列知识总结
WebApi系列知识 一.webApi项目搭建 1.新建WebApi项目 (1) (2) (3) (4) Areas – HelpPage – App_Start – HelpPageConfig.c ...
随机推荐
- delphi XE5皮肤的使用
做皮肤其实是项浩大的工程,从美工设计.到贴图.到程序设计,都非常的麻烦,如果不是一个非常成熟的产品且有很大的用户群体,并且公司具有相当实力,一般都不会去自己做皮肤,毕竟涉及的东西太多,一旦出现问题 ...
- js 有用的代码
1. 如何创建嵌套的过滤器: //允许你减少集合中的匹配元素的过滤器, //只剩下那些与给定的选择器匹配的部分.在这种情况下, //查询删除了任何没(:not)有(:has) //包含class为“s ...
- typename
typename关键字是C++在标准化过程中被引入的,目的在于向编译器说明template内的某个标识符是个类型. 如:template <typename T> class MyClas ...
- Web大文件下载控件(down2)-示例更新-Xproer.HttpDownloader
版权所有 2009-2016 荆门泽优软件有限公司 保留所有权利 官方网站:http://www.ncmem.com/ 产品首页:http://www.ncmem.com/webapp/down2/i ...
- a questions
1.2520 is the smallest nuber that can be diveded by each of the number from 1 to 10 without any rema ...
- IE11浏览器:请不要再叫我IE,谢谢
这篇对自已挺有用的,特mark一下,纯转载. 转载自:nczonline 微软在上周刚刚发布了用于Windows 8.1上 的首个Internet Explorer 11的预览版.我们已经确认Inte ...
- poj 3621 二分+spfa判负环
http://poj.org/problem?id=3621 求一个环的{点权和}除以{边权和},使得那个环在所有环中{点权和}除以{边权和}最大. 0/1整数划分问题 令在一个环里,点权为v[i], ...
- .NET相关操作其他文件的小程序(系列文章)
平时自诩为使用.NET做开发,但是实际上从一开始学习C#直到现在除了做个几个不登大雅之堂的小网站,做过几个winform程序和几个控制台应用程序,真的没有踏踏实实地用.NET开发过某些属于自己的东西. ...
- Cannot refer to an instance field pageTitle while explicitly invoking a cons
当下面这样时在第7行会提示:Cannot refer to an instance field pageTitle while explicitly invoking a cons public cl ...
- Eclipse 包排版问题
问题描述: 在Eclipse中,项目结构如下所示: 这样的显示方式,查找内容太不方便.使用不习惯. 解决方法: Eclipse中默认包的显示方式为flat,使其改为Hierarchical. 操作步骤 ...