c# MVC返回小驼峰Json(首字母小写)
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(首字母小写)的更多相关文章
- fastjson转换json字符串key的首字母小写变大写的解决办法
https://blog.csdn.net/erbao_2014/article/details/53688934 问题描述在开发过程中,由于接口文档的描述,要求json字符串的key首字母为大写,而 ...
- C#实体对象序列化成Json并让字段的首字母小写的两种解决方法
引言:最近在工作中遇到与某些API对接的post的数据需要将对象的字段首字母小写.解决办法有两种:第一种:使用对象的字段属性设置JsonProperty来实现(不推荐,因为需要手动的修改每个字段的属性 ...
- C#实体对象序列化成Json,并让字段的首字母小写
引言:最近在工作中遇到与某些API对接的post的数据需要将对象的字段首字母小写.解决办法有两种:第一种:使用对象的字段属性设置JsonProperty来实现(不推荐,因为需要手动的修改每个字段的属性 ...
- webapi时间字段返回格式设置及返回model首字母小写
GlobalConfiguration.Configuration.Formatters.Remove(new XmlMediaTypeFormatter()); // 解决json序列化时的循环引用 ...
- 关于spring的注解方式注入默认值(转) -- 首字母小写
1.是首字母小写 比如 UserAction对应的id是userAction 可以通过ApplicationContext 对象的act.getBean("userAction") ...
- 一起写框架-Ioc内核容器的实现-基础功能-容器对象名默认首字母小写(八)
实现功能 --前面实现的代码-- 默认的对象名就类名.不符合Java的命名规范.我们希望默认的对象名首字母小写. 实现思路 创建一个命名规则的帮助类.实现将对大写开头的对象名修改为小写开头. 实现步骤 ...
- IntelliJ IDEA的自动提示貌似是区分大小写的,首字母小写的话,怎么都提示不出来。
IntelliJ IDEA的自动提示貌似是区分大小写的,首字母小写的话,怎么都提示不出来. File>Settings>editor >general >code comple ...
- 【JSON.NET】json序列化小驼峰格式(属性名首字母小写)
废话少说,先上代码 var setting = new JsonSerializerSettings { ContractResolver = new Newtonsoft.Json.Serializ ...
- spring boot json 首字母大小写问题解决方案
spring boot默认使用的json解析框架是jackson,对于.net转java的项目来说太坑了,首字母大写的属性会自动转为小写,然后前端就悲剧了,十几个属性的ViewModel增加几个Js ...
随机推荐
- Solidity智能合约升级解决方案
https://blog.zeppelin.solutions/proxy-libraries-in-solidity-79fbe4b970fd
- cakephp重写配置
开启重新: (1)开启服务器的mod_rewrite模块 (2)注释掉app/ConfigScore.php中的 Configure::write('App.baseUrl', env('SCRIPT ...
- JavaScript——Dom编程(2)
①.创建一个元素节点: var reference = document.createElement(element) createElement(): 按照给定的标签名创建一个新的元素节点. 方法只 ...
- Linux下的strerror是否线程安全?
下列是glibc-2.14中的源代码: 点击(此处)折叠或打开 char * strerror (errnum) int errnum; { char *ret = __strerror_r (err ...
- ios7适配--隐藏status bar
//viewDidload if ([self respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)]) { // iOS 7 ...
- 深度学习:原理与应用实践(张重生) - Caffe
如今,深度学习是国际上非常活跃.非常多产的研究领域,它被广泛应用于计算机视觉.图像分析.语音识别和自然语言处理等诸多领域.在多个领域上,深度神经网络已大幅超越了已有算法的性能. 本书是深度学习领域的一 ...
- PLSQL_Developer 连接win7_64位oracle11g
window7系统 安装的64位 oracle11g,连接32位PLSQL_Developer 1 . 下载 PLSQL_Developer 9.0以上版本(绿色含汉化) 官方的 instantc ...
- 小议C#接口的隐式与显示实现(续)
上文连接,讲的比较模糊,而且调用起来感觉比较混乱 http://www.cnblogs.com/walleyekneel/p/3581489.html 这次改为显式接口调用,可能项目也有这个一个需求 ...
- Ubuntu不能上网解决办法
一.设置IP.网关.DNS 新安装的Ubuntu系统ifconfig后发现没有ip,所以要设置IP.网关.DNS等,编辑 /etc/networking/interfases sudo vi /et ...
- 检查Windows上安装的.net版本
cmd reg query "HKLM\Software\Microsoft\NET Framework Setup\NDP" /s /v version | findstr /i ...