/// <summary> /// 这是一个方法 /// </summary> /// <param name="model">这是一个model</param> /// <returns></returns> [HttpPost] public Response<string> PostListModel([FromBody]List<model> list) { }
var postdata = '[{"ID":1,"mobile":214,"Name":"ff%d","Phone":"5255","CreateDate":"","MID":-1}]'; $.ajax({ type: 'POST', contentType: "application/json; charset=urf-8", url: 'http://localhost:50750/api/test/PostListModel',
//data: JSON.stringify(postdata),
data: postdata,
dataType: 'json',
success: function (result) { alert(result); },
error: function (e) { alert(e); } });
这样获取到的list里面显示有一条数据,但是除了ID是显示为0,其它都显示为空
如果用
JSON.stringify(postdata)方法的话,则会显示为空
后端代码接受的参数是 ‘list‘,那么前端js应该这样写:
$.ajax({ type: 'POST', contentType: "application/json; charset=urf-8", url: 'http://localhost:50750/api/test/PostListModel',
data:{ list: JSON.stringify(postdata)},
dataType: 'json',
success: function (result) { alert(result); },
error: function (e) { alert(e); } });
我试了下,发现这样还是不行,现在主要是安卓端提交上来的JSON找不到对应的控制器方法,那个控制器里只有一个POST的方法的,安卓那边的说:
现在的post是http的body就是json,你要获取就输获取整个body的数据的
,请问这个情况怎么解决啊?客户明天要就交项目了的……求了
@枫叶飘零黄昏血: 我开项目试了下。 可以利用字符串+反序列化实现你要的功能。
$.ajax({ type: 'POST', contentType: "application/json; charset=urf-8", url: 'http://localhost:50750/api/test/PostListModel',
data:{ list: JSON.stringify(postdata)},
dataType: 'json',
success: function (result) { alert(result); },
error: function (e) { alert(e); } });
后端:
public Response<string> PostListModel(string s) {
List<model> us = Newtonsoft.Json.JsonConvert.DeserializeObject<List<model>>(list);
}
$.ajax({ type: 'POST', contentType: "application/json; charset=urf-8", url: 'http://localhost:50750/api/test/PostListModel',
data:{ list: postdata},
dataType: 'json',
success: function (result) { alert(result); },
error: function (e) { alert(e); } });
前端这样写
@枫叶飘零黄昏血:
让Android开发的同事提交给你 的对象序列化就可以。 我们现在的项目就是同步这样的方式和MVC交互数据
@XIAO小蜗牛: 我叫他试一下,序列化的时候Model中的每个字段都要列出来的吗?不管有用到没用到的?
@枫叶飘零黄昏血: 不用每个字段,只接收需要的字段即可
@XIAO小蜗牛: 现在服务端可以找到相应的方法了,不过接收到的list是null,没有值,这个是为什么啊?
安卓端说:我这边传的是集合
是不是还要把集合也序列化的啊?
@枫叶飘零黄昏血: 把整个集合序列化。 你接收用 string 接收,然后反序列化。
@枫叶飘零黄昏血: 不需要。
@罗玉虎: 我试了一下,把[HttpPost]和[FromBody]这些都去掉了,发现POST的时候不会进那个方法了,安卓那边POST的时候要对应服务端的string的参数名的吗?还是有什么讲究的?
@罗玉虎: 我把[HttpPost]和[FromBody]这些加上了也不行,传进来的string是空的,这里面有什么特别的讲究的吗?
搞定了,虽然不是用你这种方法解决的,但还是感谢你那么晚了还回答我问题,我在CSDN也花了一百金提问,你有号的话也过去领了吧http://bbs.csdn.net/topics/391005911
@枫叶飘零黄昏血: 请问怎么解决的
@酱油荷: 如果是POST,用实体来接收就算加了[FromBody]也还是接收不到的,只能是自己从请求内容中一个个接收了,现在我是专门写了个反射的方法来自动找的。
@酱油荷: 如果是POST,用实体来接收就算加了[FromBody]也还是接收不到的,只能是自己从请求内容中一个个接收了,现在我是专门写了个反射的方法来自动找的。(忘了个重要的条件了,是带文件的才会这样,其它的还是正常的。)
json 提交 首先一端先要序列化成json字符串进行传递,然后接收端反序列化成对应的数据类型。当然要注意中文的问题,也就是编码。
楼主,你怎么解决的,我也遇到跟你一模一样的情况,除了I'd是0,其他都为null