1.与前端交互时,前端总希望传过去的json字段名首字母小写,但是.net规范是首字线大写

如果就写了下面的转换方法

/// <summary>
/// Poco类字段名转换成首字母小写的字典
/// 用于 MVC 的 new JsonResult(){Data=xxx} 后前端Javascript使用
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="obj"></param>
/// <returns></returns>
public static dynamic PocoToFirstCharLowerJsonResultData<T>(this T obj) where T : class
{
var objJson = obj.ToJson();
var dict = objJson.ToInstance<Dictionary<string, object>>(); return dict.ToDictionary(p => p.Key[].ToString().ToLower() + p.Key.Substring(), p => p.Value);
} /// <summary>
/// 普通类字段名转换成首字母小写的字典
/// 用于 MVC 的 new JsonResult(){Data=xxx} 后前端Javascript使用
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="obj"></param>
/// <returns></returns>
public static dynamic ToFirstCharLowerJsonResultData<T>(this T obj) where T : class
{
var objJson = obj.ToJson();
var rx = new Regex(@"""(?<v>(\w)*?)"":", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline);
var match = rx.Match(objJson);
while (match.Success)
{
var originalKeyName = match.Result("${v}");
var currentKeyName = originalKeyName[].ToString().ToLower() + originalKeyName.Substring();
objJson = rx.Replace(objJson, "\"" + currentKeyName + "\":", , match.Index);
match = match.NextMatch();
} var dict = objJson.ToInstance<Dictionary<string, object>>(); return dict.ToDictionary(p => p.Key[].ToString().ToLower() + p.Key.Substring(), p => p.Value);
}

2.Controller调用如下

 public ActionResult QueryAllModels()
{
var response = this.Service.QueryModels(); return new JsonResult(){Data=response .ToFirstCharLowerJsonResultData()};
}

3.另一种实现,用 Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver

/// <summary>
/// JsonResult,驼峰式转换
/// </summary>
public class LowerCamelJsonResult : ActionResult
{
/// <summary>
/// 目标对象
/// </summary>
public object Data { get; set; } /// <summary>
/// 构造器
/// </summary>
public LowerCamelJsonResult() { } /// <summary>
/// 构造器
/// </summary>
public LowerCamelJsonResult(object data)
{
this.Data = data;
} /// <summary>
/// 重写执行结果
/// </summary>
/// <param name="context"></param>
public override void ExecuteResult(ControllerContext context)
{
if (context == null)
{
throw new ArgumentNullException("context");
} //json对象命名小驼峰式转换
var json = JsonConvert.SerializeObject(
this.Data,
Formatting.Indented,
new JsonSerializerSettings { ContractResolver = new Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver() }
); context.HttpContext.Response.Write(json);
}
}

调用方法

 public ActionResult QueryAllModels()
{
var response = this.Service.QueryModels(); return new LowerCamelJsonResult(){Data=response };
}

c# MVC返回小驼峰Json(首字母小写)的更多相关文章

  1. fastjson转换json字符串key的首字母小写变大写的解决办法

    https://blog.csdn.net/erbao_2014/article/details/53688934 问题描述在开发过程中,由于接口文档的描述,要求json字符串的key首字母为大写,而 ...

  2. C#实体对象序列化成Json并让字段的首字母小写的两种解决方法

    引言:最近在工作中遇到与某些API对接的post的数据需要将对象的字段首字母小写.解决办法有两种:第一种:使用对象的字段属性设置JsonProperty来实现(不推荐,因为需要手动的修改每个字段的属性 ...

  3. C#实体对象序列化成Json,并让字段的首字母小写

    引言:最近在工作中遇到与某些API对接的post的数据需要将对象的字段首字母小写.解决办法有两种:第一种:使用对象的字段属性设置JsonProperty来实现(不推荐,因为需要手动的修改每个字段的属性 ...

  4. webapi时间字段返回格式设置及返回model首字母小写

    GlobalConfiguration.Configuration.Formatters.Remove(new XmlMediaTypeFormatter()); // 解决json序列化时的循环引用 ...

  5. 关于spring的注解方式注入默认值(转) -- 首字母小写

    1.是首字母小写 比如 UserAction对应的id是userAction 可以通过ApplicationContext 对象的act.getBean("userAction") ...

  6. 一起写框架-Ioc内核容器的实现-基础功能-容器对象名默认首字母小写(八)

    实现功能 --前面实现的代码-- 默认的对象名就类名.不符合Java的命名规范.我们希望默认的对象名首字母小写. 实现思路 创建一个命名规则的帮助类.实现将对大写开头的对象名修改为小写开头. 实现步骤 ...

  7. IntelliJ IDEA的自动提示貌似是区分大小写的,首字母小写的话,怎么都提示不出来。

    IntelliJ IDEA的自动提示貌似是区分大小写的,首字母小写的话,怎么都提示不出来. File>Settings>editor >general >code comple ...

  8. 【JSON.NET】json序列化小驼峰格式(属性名首字母小写)

    废话少说,先上代码 var setting = new JsonSerializerSettings { ContractResolver = new Newtonsoft.Json.Serializ ...

  9. spring boot json 首字母大小写问题解决方案

     spring boot默认使用的json解析框架是jackson,对于.net转java的项目来说太坑了,首字母大写的属性会自动转为小写,然后前端就悲剧了,十几个属性的ViewModel增加几个Js ...

随机推荐

  1. 微信WeixinJSBridge API 屏蔽右上角分享等常用方法

    WeixinJSBridge这个API有几个功能还是相当有用的,比如: 1.隐藏微信网页右上角的按钮(...按钮):开发者可以用这个功能来禁止当前页面被分享 2.隐藏微信网页底部的导航栏(比如前进后退 ...

  2. PHP学习笔记之continue与break

    百度中有人这样解释:break是结束整个循环体,continue是结束单个循环体.昨天看燕十八老师PHP视频,讲到break,continue时,举了一个例子,理解更容易.天龙八部中,西夏国公主选婿, ...

  3. R list frame, matrix

    list是个筐,什么都可以往里装,包括它自身.数据框是个二维数组,同列必须同类型,行随意.

  4. c# 二分查找法(2分钟算法)

    using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threa ...

  5. 实践作业3:白盒测试----findbugs介绍及使用DAY7

    本小组选择的是一个开源的Java静态代码分析工具----Findbugs. 与其他静态分析工具(如Checkstyle和PMD)不同,FindBugs 不注重样式或者格式,它专注于寻找真正的缺陷或者潜 ...

  6. 黑盒测试实践-小组任务分配和安排-Day01

    实践作业2:黑盒测试实践 小组成员 组长:华同学 成员:覃同学.沈同学.刘同学.郭同学.穆同学 任务分解 任务1:分析系统需求 参考软件需求规格说明书模板描述系统需求.如果系统功能特别多,特别复杂,则 ...

  7. Java实现四则运算 谢雅淇 袁杏仪

    GitHub链接:https://github.com/3216004716/four-operations.git 项目相关要求 使用 -n 参数控制生成题目的个数,例如 Myapp.exe -n ...

  8. window phone 8资源管理器打开文件

    一.打开安装包里面文件: StorageFolder sf = Package.Current.InstalledLocation;//ApplicationData.Current.LocalFol ...

  9. C#ADO.NET基础一

    简介 使用SQLite进行讲解 1.基础类: SQLiteConnection 连接数据库 SQLiteCommand 执行命令(增,删,改,查),或存储过程 SQLiteDataReader 读取查 ...

  10. Vue axios发送Http请求

    axios 1.cnpm install axios --save 2.在vue文件中引入,import Axios from 'axios' 3.使用,Axios.get(url).then((re ...