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 ...
随机推荐
- Python 网络爬虫 009 (编程) 通过正则表达式来获取一个网页中的所有的URL链接,并下载这些URL链接的源代码
通过 正则表达式 来获取一个网页中的所有的 URL链接,并下载这些 URL链接 的源代码 使用的系统:Windows 10 64位 Python 语言版本:Python 2.7.10 V 使用的编程 ...
- Solidity notes
1. 查询transaction历史记录 https://forum.ethereum.org/discussion/2116/in-what-ways-can-storage-history-be- ...
- R语言的并行运算(CPU多核)
通常R语言运行都是在CPU单个核上的单线程程序.有时我们会有需求对一个向量里的元素应用相同的函数,最终再将结果合并,并行计算可以大幅节约时间. 为了支持R的并行运算, parallel包已经被纳入了R ...
- VC维的来龙去脉(转)
本文转自VC维的来龙去脉 本文为直接复制原文内容,建议阅读原文,原文排版更清晰,且原网站有很多有意思的文章. 阅读总结: 文章几乎为台大林老师网课“机器学习可行性”部分串联总结,是一个很好的总结. H ...
- Adorner的收集
Adorners Overview https://docs.microsoft.com/en-us/dotnet/framework/wpf/controls/adorners-overview ' ...
- HttpWebRequest post上传文件
public static string HttpUploadFile(string url, string path) { // 设置参数 HttpWebRequest request = WebR ...
- Java集合类总结 (二)
LinkedList类 由于基于数组的链表有一个大的缺点,那就是从链表中间移除一个元素时需要将此元素后面的所有元素向前移动,会产生大量的开销,同样的在链表中间插入一个新元素也会有大量开销.如下图: L ...
- Graphic 完成文字缩放
思路:将文字生成图片,再加载此图片伸缩至需要大小. 首先要获取文字的实际大小.宽度高度,再通过图片缩放就OK了 public static void DrawText() { Font f = , F ...
- 如何使用 channel
如何使用 Channel 例子来自于Concurrency is not parallelism Google Search: A fake framework v1.0 var ( Web = fa ...
- 2018年第九届蓝桥杯C/C++A组省赛(最后一题)
第十题 付账问题 [题目描述] 几个人一起出去吃饭是常有的事.但在结帐的时候,常常会出现一些争执. 现在有 n 个人出去吃饭,他们总共消费了 S 元.其中第 i 个人带了 ai 元.幸 ...