这个思路是从 一篇文章,关于《提升web api的性能》上看到的。自己实践了一番,写下步骤。

传统的DataReader是遵循这样的一个步骤:

While(reader.Read())

{

//创建对象,赋值,添加到集合

}

//返回Json.序列化(集合)

现在我们采用的是手工拼接Json字符串:通过解析DataReader的数据格式、内容,采用StringBuilder.Append这种方式进行手工拼接。

避免了每次初始化对象、序列化集合所带来的内存、时间上的消耗。在查询数据量很大集合时,很有帮助。

代码很简单,就不多做解释了

using System;
using System.Data.SqlClient;
using System.Text; namespace DataProvider.Common
{
public class Tools
{
/// <summary>
/// 将Reader集合转换成字符串
/// </summary>
/// <param name="reader"></param>
/// <returns></returns>
public static string ConvertReadersToJson(SqlDataReader reader)
{
var jsonStr = new StringBuilder();
jsonStr.Append("["); while (reader.Read())
{
ConvertSingleReaderToJson(reader, jsonStr);
jsonStr.Append(",");
} if (jsonStr.Length > )
{
jsonStr.Length = jsonStr.Length - ;
jsonStr.Append("]");
return jsonStr.ToString();
} return string.Empty;
} /// <summary>
/// 将一个Reader转换成Json字符串,reader必须可读.read
/// </summary>
/// <param name="reader"></param>
/// <param name="jsonStr"></param>
public static void ConvertSingleReaderToJson(SqlDataReader reader, StringBuilder jsonStr)
{
jsonStr.Append("{"); for (var i = ; i < reader.FieldCount; i++)
{
//值类型数据不需要引号,否则需要
var fieldType = reader.GetFieldType(i);
object fileValue = reader[i]; if (fieldType == typeof(DateTime))
{
DateTime dt = DateTime.MinValue; if (DateTime.TryParse(fileValue.ToString(), out dt))
{
fileValue = ConvertDateTimeToJson(dt);
}
}
//日期作为特殊情况已经处理过了
var comma = (fieldType == typeof(string) || fieldType == typeof(Guid)) ? "\"" : "";
jsonStr.AppendFormat("\"{0}\":{2}{1}{2},", reader.GetName(i), fileValue, comma);
}
//去掉多余的逗号
jsonStr.Length = jsonStr.Length - ;
jsonStr.Append("}");
} /// <summary>
/// 将.net 日期格式转换成Json日期格式
/// </summary>
/// <param name="dt"></param>
/// <returns></returns>
public static string ConvertDateTimeToJson(DateTime dt)
{
DateTime d1 = new DateTime(, , );
DateTime d2 = dt.ToUniversalTime();
TimeSpan ts = new TimeSpan(d2.Ticks - d1.Ticks);
return string.Format("\"/Date({0})/\"", ts.TotalMilliseconds.ToString("#"));
}
}
}

PS:另外。请教下各位朋友,如何去除Web Api默认托管的Json.net序列化框架,改用自己手工写Json呢?

也就是说,Controller传入、传出的对象是String类型,我自己来负责解析?

最新文章

  1. [转]DB2时间类函数
  2. A potentially dangerous Request.Form value was detected from the client
  3. [游戏学习25] MFC 橡皮筋画线效果
  4. Winpcap
  5. [转]SQL Server建立应用程序安全性和程序角色
  6. (转)Asp.NetURL重写的一种方法
  7. mysql的查询缓存模式介绍
  8. Delphi实现AnsiString与WideString的转换函数 转
  9. XDocument读取xml的所有元素以及XPath语法
  10. Go by Example
  11. 浅析深究什么是SOA?
  12. 鉴客 C# 抓取页面(带认证)
  13. Log POST Data in Nginx
  14. java 类变量的初始化
  15. python 继承基础
  16. 【土旦】Vue+WebSocket 实现长连接
  17. docker镜像常用操作
  18. vuex学习总结
  19. Django配置相关及其它
  20. Jave Web阿里云短信服务发送验证码

热门文章

  1. 使用pug(jade),以及在vue+webpack中使用pug(jade)
  2. docker使用阿里云镜像仓库
  3. android studio升级时提示 Connection failed. Please check your network connection and try again
  4. zookeeper两台内网服务器彼此调不到服务的问题。
  5. kafka 相关配置
  6. LeetCode-Count Bits
  7. LeetCode 笔记系列 18 Maximal Rectangle [学以致用]
  8. 区分兼容IE6/IE7/IE8/IE9/FF的CSS HACK写法
  9. powerdesigner 修改name时code不修改
  10. FZU 2140 Forever 0.5(找规律,几何)