王风坤的博客

  • 首页
  • 技术相关
  • 常用软件
  • 免费资源
  • 杂乱无章

JSON

ASP.NET MVC中向Controller传递数组的几种方式

2014年9月21日 by 王风坤 Leave a Comment

从浏览器中提交的哪些形式的参数能够被MVC识别为数组参数?

1.name=1&name=2&name=3

2.name[0]=1&name[1]=2&name[2]=3

3.[0]=1&[1]=2&[2]=3

4.{name:[1,2,3]}

 

一般情况下只要将数组参数改为以上四种形式中的任意一种即可不需要修改任何后端代码即可实现数组的传递。

假设后台controller、action

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
 
public ActionResult Exec(long[] array)
{
if(array!=null)
{
foreach(var l in array)
{
Response.Write(l);
Response.Write(“<br />”);
}
}
return Content("");
}

 

前台jQuery.ajax

JavaScript
1
2
3
4
5
6
7
8
9
10
 
var data={array:[1,2,3]};
$.ajax({
url:”/ajax”,
data:data,
success:function(r)
{
    alert(r);
}
});

 

默认情况下上面这种形式提交后,Controller是获取不到数组的,通过调试工具看一下就会知道原因了,

{array:[1,2,3]} 被转换成了array[]=1&array[]=2&array[]=3的参数形式,参数名被改成了array[],导致取不到array的实际参数。

1.改成name=1&name=2&name=3形式

JavaScript
1
2
3
4
5
6
7
8
9
10
 
$.ajax({
url:”/ajax”,
traditional:true,
data:data,
success:function(r)
{
alert(r);
}
});

 

使用traditional即可将{array:[1,2,3]}转换为array=1&array=2&array=3的形式。

 

2.改成name[0]=1&name[1]=2&name[2]=3的形式,将data参数改为一下形式

JavaScript
1
2
3
4
 
data[“name[0]”]=1;
data[“name[1]”]=2;
data[“name[2]”]=3;

3.改成[0]=1&[1]=2&[2]=3的形式,将上面(2)的name去掉即可

 

4.改成{name:[1,2,3]}形式,注意这里是字符串,而不是json对象,所以你需要将data序列化成字符串,同时提交到后台时需要设置类型为json类型,这样后台处理时才会作为json对象。

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
 
var data=JSON.stringgify({name:[1,2,3]});//序列化
$.ajax({
url:”/ajax”,
contentType:”application/json”,//设置格式
type:”POST”,//要POST才行
data:data,
success:function(r)
{
alert(r);
}
});

 

一般前台处理的方式就这四种,根据自己的需要使用适合自己的就行了,鉴于json的便利性,如果是ajax之类的最好直接用json形式传递,编码也相对能简单些,如果是form直接提交就可以直接用前三种方式了。

如果你有更好的方式欢迎交流。

Posted in: 技术相关 Tagged: ASP.NET, C#, JSON, MVC, 数组

将JSON转换为C#源码

2014年5月3日 by 王风坤 Leave a Comment

昨天看到PushBullet有一个简单的API可以用,想着练练手用C#封装一下,最后除了文件不知道怎么处理外一切进展顺利,数据能被成功推送到指定的设备上。

2014-05-03_163723

但是发现调用推送数据的API后会返回一大串JSON,眼都看花了,更不用说写出类来了,所以干脆写个工具自动生成吧,也能在以后遇到类似的问题时直接拿来用。

2014-05-03_164020

花了大概一天时间终于做的差不多了,JsonToCSharp,主要功能就是将json转换为C#类代码,本想用Json2Charp,后来查了一下网上早就有一个Json2CSharp。

我做的和网上之前已有的那个功能差不多,只不过是我的是用JS实现,同时对数组中的对象做了一些处理,如:

{test:[1,{name:"王风坤"}]}

通过Json2Charp转换后是

C#
1
2
3
4
5
 
public class RootObject
{
    public List<object> test { get; set; }
}

通过JsonToCharp转换后是

C#
1
2
3
4
5
6
7
 
public class Object{
public string Name{get;set;}
}
public class Root{
public List<object> Test{get;set;}
}

可以看出,除了命名、大小写、缩进的区别外,我还额外生成了一个类,由于这个类在一个数组中,没有直接的属性指向它,所以我用了Object做类名,现在这个类只有一个属性,如果有很多属性,你可能就要生成两次、三次或更多次了。

再举一个比较明显的例子,比如:

{test:[1,{name:"王风坤",gender:{name:"男"}}]}

通过Json2Charp得出的结果与上面的相同,也就是说,数组中的类型不一致是他就不再继续处理数组中的对象了。

用JsonToCharp生成后,可以看出所有对象都被生成了对应的类

C#
1
2
3
4
5
6
7
8
9
10
11
 
public class Gender{
public string Name{get;set;}
}
public class Object{
public string Name{get;set;}
public Gender Gender{get;set;}
}
public class Root{
public List<object> Test{get;set;}
}

所以如果你的JSON结构比较复杂,数组中包含多个不同的类型,你可以用JsonToCSharp

Posted in: 技术相关 Tagged: C#, JSON, JsonToCSharp

近期文章

  • 金尚装饰。。没骗到我,哈哈
  • 利用syncthing搭建私有云
  • 多说即将关闭,又一个不能变现的项目倒下
  • 解决js保留关键字作为属性在IE8下的兼容性问题
  • FastMapper 高性能实体转换组件
  • linux下使用 docker 部署 asp.net vNext
  • AutoMapper 基本使用
  • CentOS安装mono
  • js中+[]为何会等于0
  • System.Data.OracleClient需要Oracle客户端软件8.1.7或更高版本

文章归档

  • 2018年二月
  • 2017年十一月
  • 2017年五月
  • 2017年三月
  • 2016年九月
  • 2016年三月
  • 2015年七月
  • 2015年四月
  • 2015年二月
  • 2015年一月
  • 2014年十二月
  • 2014年十一月
  • 2014年九月
  • 2014年八月
  • 2014年七月
  • 2014年六月
  • 2014年五月
  • 2014年四月
  • 2014年三月
  • 2014年二月
  • 2014年一月
  • 2013年十二月
  • 2013年十一月
  • 2013年十月
  • 2013年九月
  • 2013年八月

标签

.NET 10T 65279 ADSafe ajax AppDomain ASP.NET BOM头 C# CDMA CDN Classing{js} CoffeeScript cookie cookie丢失 css CyBoost device EF EFBBBF EntityFramework FTP Gif GifCam html5 iframe javascript jQuery js JSON Linux mysql oracle PHP sql windows live writer wordpress wordpress插件 免费 免费CDN 免费空间 免费软件 异常 数据库 系统加速

Copyright © 2018 王风坤的博客.

Beta WordPress Theme by themehall.com