Ray Lei 发布的文章

C#扩展方法

扩展方法可以让你在不对原有类型进行修改、继承和重新编译的条件下,添加一些额外功能。扩展方法是一种特定类型的静态方法,但可以通过原始类型的实例进行调用。通过C#实现的扩展方法在使用方法上跟原始类型的真实定义的方法没有不同。

因此上述特性很适合在对一些类库进行二开时使用,如笔者就是通过项目中发现对newtonsoft.json.dll进行扩展才了解到这个知识点的。可见多读项目代码还是多少有用的!

最常用的扩展方法要数对于System.Collections.IEnumerable和System.Collections.Generic.IEumerable<T>类型添加LINQ查询操作。要使用标准的LINQ查询方法,只要引入System.Linq命名空间,然后在任何实现IEnumerable<T>接口的类型实例中都可以使用GroupBy, OrderBy, Average等方法,如List<T>和Array。

- 阅读剩余部分 -

带转换的继承类的JSON序列化

本文只是一个简单的知识点,撰文起因是之前在项目中用到内部类的JSON序列化有问题,后来发现是自己写法错误。这里权当一个记录吧。

在通过继承方式实现语言的多态性时,对有转换和替换关系的基类、子类对象进行JSON的序列化和反序列化,需要设置JsonSerializerSettings中的类型名称TypeNameHandling枚举才能生效。

- 阅读剩余部分 -

JSON Schema Validation介绍

工作中经常会开发一些接口公布出去,接口以HTTPHandler方式挂载在ASP.NET上,是以*.filetype的后缀形式路由到具体的处理类中。接口参数以JSON格式通过post方法写在Request body中,宿主的ERP系统并没有提供对应的参数校验框架,因此无法像其他基于其他API框架的形式,对输入参数进行统一的校验。

本文针对这种情况,将介绍下JSON.NET自带的JSON Schema校验方式。

- 阅读剩余部分 -

SQLServer使用for xml path()来拼接行

在写SQL语句时,有时候需要对表中的行进行拼接,这时候可以使用STUFF()和for xml path()语句:

如有表如下:

id  |   name
----------
1   |   aaa
1   |   bbb
1   |   ccc

你想得到的结果如下:

id  |   result
--------------
1   |   aaa,bbb,ccc

有的在业务系统中通过多次查询拼接也可以得到如上结果,但是多次查询数据库会更麻烦。这里可以使用TSQL的STUFF函数和for xml path()方法。

- 阅读剩余部分 -

《RabbitMQ入门之Go语言教程》(6) 远程过程调用(RPC)

第二篇文章中介绍了如何利用工作队列将耗时任务分发到多个消费者工作程序中。

考虑下另一种情况:如果需要在一个远程机器上执行一个函数然后等待它的返回结果应该怎样?这个过程称之为远程过程调用(RPC:Remote Procedure Call).

本篇将介绍如何利用RabbitMQ实现一个包含客户端和可扩展服务端的RPC系统,仍然跟之前的一样,利用模拟计算来替代真实的耗时任务,这里使用计算斐波那契数列函数。

- 阅读剩余部分 -