在C#中读取和解析来自POST请求的JSON数据

3
我正在使用JQuery的Ajax进行POST请求,数据类型被定义为json,包含要发布到服务器的值,例如Username: "Ali"
在处理程序中需要做的是读取这些值,将它们反序列化为一个名为User的对象。
String data = new System.IO.StreamReader(context.Request.InputStream).ReadToEnd();
User user = JsonConvert.DeserializeObject<User>(data);

在调试时,data的值如下:

Username=Ali&Age=2....

现在我确定这不是JSON,所以下一行代码肯定会出错:

"Unexpected character encountered while parsing value: U. Path '', line 0, position 0."

如何从POST请求中正确读取JSON数据?

客户端:

$.ajax({
    type: 'POST',
    url: "http://localhost:38504/DeviceService.ashx",
    dataType: 'json',
    data: {
      Username: 'Ali',
      Age: 2,
      Email: 'test'
    },
    success: function (data) {
    },
    error: function (error) {
    }
  });

2
返回该 POST 请求返回的字符串。 - Ashok Damani
@AshokDamani 这不就是 data 的值吗? - Ali Bassam
这是一个完整的字符串,Username=Ali&Age=2&Email=test,同样的内容重复出现... - Ali Bassam
看起来你的字符串像是被编码成了一个URL。也许如果你将它传递给一个URL解码器,它就可以工作了(http://msdn.microsoft.com/de-de/library/6196h3wt%28v=vs.110%29.aspx)。 - Luke
@Luke,我添加了jQuery部分。 - Ali Bassam
3个回答

5
将您的对象转换为JSON字符串:
$.ajax({
    type: 'POST',
    url: "http://localhost:38504/DeviceService.ashx",
    dataType: 'json',
    data: JSON.stringify({
      Username: 'Ali',
      Age: 2,
      Email: 'test'
    }),
    success: function (data) {
    },
    error: function (error) {
    }
  });

4

我不确定为什么你的数据字符串被编码成类似于URL的格式(看起来是这样)。

但这可能会解决问题(尽管我不确定)。

String data = new System.IO.StreamReader(context.Request.InputStream).ReadToEnd();
String fixedData = HttpServerUtility.UrlDecode(data);
User user = JsonConvert.DeserializeObject<User>(fixedData);

0

在C#文件中使用这个...会给你所需的结果...

string username=Request.Form["Username"].ToString();

同样地,对于其他情况也是如此...

我希望这能帮到你。

另一个答案是,你可以像这样发送数据。

$.ajax({
                    url: '../Ajax/Ajax_MasterManagement_Girdle.aspx',
                    data: "Age=5&id=2"
                    type: 'POST',
                    success: function (data) {

                    }
                });

在C#中可以像这样得到答案

string Age=Request.Form["Age"].ToString();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接