回到目录

起初只是一个想法,一次讨论,一个设想,但相信一定可以实现,具体的事情是这样的,有个对外的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的更多相关文章

  1. WebApi系列~目录

    回到占占推荐博客索引 写了这个系列的文章不少了,也应该为大家写个目录了,最近很刮了很多SOA的风,很多企业都将自己的系统进行分割,通常是按模块进行拆分,为这个模块提供统一的接口提供业务服务,这不紧可以 ...

  2. 【WebApi系列】详解WebApi如何传递参数

    WebApi系列文章 [01]浅谈HTTP在WebApi开发中的运用 [02]聊聊WebApi体系结构 [03]详解WebApi参数的传递 [04]详解WebApi测试和PostMan [05]浅谈W ...

  3. 【WebApi系列】浅谈HTTP

    [01]浅谈HTTP在WebApi开发中的运用 [02]聊聊WebApi体系结构 [03]详解WebApi如何传递参数 [04]详解WebApi测试和PostMan [05]浅谈WebApi Core ...

  4. 【WebApi系列】浅谈HTTP在WebApi开发中的运用

    WebApi系列文章 [01]浅谈HTTP在WebApi开发中的运用 [02]聊聊WebApi体系结构 [03]详解WebApi参数的传递 [04]详解WebApi测试和PostMan [05]浅谈W ...

  5. MS SQL巡检系列——检查外键字段是否缺少索引

    前言感想:一时兴起,突然想写一个关于MS SQL的巡检系列方面的文章,因为我觉得这方面的知识分享是有价值,也是非常有意义的.一方面,很多经验不足的人,对于巡检有点茫然,不知道要从哪些方面巡检,另外一方 ...

  6. Http下的各种操作类.WebApi系列~通过HttpClient来调用Web Api接口

    1.WebApi系列~通过HttpClient来调用Web Api接口 http://www.cnblogs.com/lori/p/4045413.html HttpClient使用详解(java版本 ...

  7. 学习ASP.NET Core Razor 编程系列十一——把新字段更新到数据库

    学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...

  8. 反射序列化字段的时候,需要添加[Datamember]不然会,忽略这个字段

    反射序列化字段的时候,需要添加[Datamember]不然会,忽略这个字段

  9. WebApi系列知识总结

    WebApi系列知识 一.webApi项目搭建 1.新建WebApi项目 (1) (2) (3) (4) Areas – HelpPage – App_Start – HelpPageConfig.c ...

随机推荐

  1. Document-对象属性和常用的对象方法

    Document-对象属性和常用的对象方法 对象属性 document.title                           //设置文档标题等价于HTML的title标签 document ...

  2. java swing 去掉按钮文字周围的焦点框

    闲来无事,写了个swing界面,运行后看到当点击按钮时,中间文字会出现一个刚好把文字围住的小方框,这是按钮获得焦点的标志,我是觉得一个字:丑!怎么去掉呢?万能的度娘告诉我,设置下button的setF ...

  3. WinForm程序关闭窗体后杀死进程

    调用this.Close();后监听Browser_FormClosed加作处理 this.FormClosed += new System.Windows.Forms.FormClosedEvent ...

  4. 【Android UI】Android ListView详解

    在android开发中ListView是比较常用的组件,它以列表的形式展示具体内容,并且能够根据数据的长度自适应显示.抽空把对ListView的使用做了整理,并写了个小例子,如下图. 列表的显示需要三 ...

  5. uva-327

    题意:给出一个C语言加减法表达式,求出这个表达式的最终结构,以及各个变量的值,每个变量保证至出现一次,保证输入的字符串合法: 输入:一串包含+.-和小写的26个英文字母: 输出:表达式的结果,以及表达 ...

  6. input文本框去除单击时的边框的方法

    前端开发写的input文本框标签后单击时可以看到有边框,去除边框的方法: input{     outline:medium; }

  7. jquery datepicker 只显示年月

    首先修改默认日期赋值 <script type="text/javascript"> $(function(){ $('#searchDate').datepicker ...

  8. Bookstore project using XAMPP 详细配置 Part 3

    3. Create PHP 1) “Sublime Text” is used as text editor. 2) HTML part of “hello.php” was created as s ...

  9. 解决Ubuntu发热量大的问题

    转自:http://blog.csdn.net/tracker_w/article/details/8801971 用Ubuntu 的朋友应该都有体会,开机不久风扇就开始狂转,本本也会很热.据说是双显 ...

  10. java 内存模型

    翻译自wiki百科:https://en.wikipedia.org/wiki/Java_memory_model 没找到直接在wiki上编辑中文的页面,我就在这翻译下,自己学习用. java内存模型 ...