C# Web 服务,如何接收 JSON

Posted

技术标签:

【中文标题】C# Web 服务,如何接收 JSON【英文标题】:C# Web service, how to receive JSON 【发布时间】:2012-07-17 01:25:38 【问题描述】:

我用 jquery 制作了一个 JSON 字符串,我想将它发送到 C# web api 控制器。

这是 JSON 对象的示例

"Name":"","Type":"4","Meals":["2","3"],"Excludes":["Beef","Chicken"]

我尝试使用这样的 URL 发送它

API/Recipe/Search?json="Name":"","Type":"4","Meals":["2","3"],"Excludes":["Beef","Chicken"]

像这样使用我的控制器:

public class RecipeController : ApiController


    [HttpGet]
    public string Search(searchObject json)
    
        return "Asdasd";
    
 

像这样

   public class RecipeController : ApiController


    [HttpGet]
    public string Search(string json)
    
        searchObject search = (searchObject)JsonConvert.DeserializeObject(json);

        return "Asdasd";
    

但在任何情况下,控制器都不会拾取它。我正在使用 MVC4。

这是我用来拨打电话的 Jquery。 apiLink 是我上面贴的链接。

$.getJSON(apiLink, function (data) 
        var items = [];

        $.each(data, function (key, val) 
            items.push('<li id="' + key + '">' + val + '</li>');
        );

        $('<ul/>', 
            'class': 'my-new-list',
            html: items.join('')
        ).appendTo('body');
    );

如何让控制器接收 JSON 对象?

谢谢

【问题讨论】:

你打开你是用jQuery来调用你的动作吗? 是的。我现在将在原始帖子中编辑我的 jquery 代码。 firebug 显示该链接是一个 http 错误 400 错误请求。 【参考方案1】:

您应该在方法中使用 POST 属性,这样您就可以将复杂的对象发布到 Web API,

您可以为 JSON 创建一个类,来自 json to cSharp

public class SearchObject

    public string Name  get; set; 
    public string Type  get; set; 
    public List<string> Meals  get; set; 
    public List<string> Excludes  get; set; 

然后在您的 Web api 中,使用 HttpPost 属性指定方法,Web API 将负责将 post 中的 json 反序列化到您的模板。

[HttpPost]
public string Search(SearchObject json)

    return "Asdasd";

您可以尝试 fiddler,用于发出 post 请求,在请求标头中指定类型:

内容类型:应用程序/json

并在请求正文中粘贴您的 json,然后执行

【讨论】:

【参考方案2】:

看起来您已经收到了回复,但这里是有效解决方案的代码:

注意:我在MVC3中使用了JsonResult Actions,但是原理是一样的

控制器:

    public class HomeController : Controller
    
        //
        // GET: /Home/

        public ActionResult Index()
        
            return View();
        

        [HttpPost] // requires HttpPost attribute
        public JsonResult SendData(SearchObject payload)
        
            // do something here

            return Json(new  status = "Success" );
        
    

    public class SearchObject
    
        public string Name  get; set; 
        public string Type  get; set; 
        public List<string> Meals  get; set; 
    

查看:

@
    ViewBag.Title = "Index";

<script src="../../Scripts/jquery-1.7.2.min.js" type="text/javascript"></script>
<script type="text/javascript">
    $.ajaxSetup( accepts: "application/json" );
    $.ajax(
        url: '@Url.Action("SendData")', type: "POST",
        success: function (data) 
            alert(data.status); 
        ,
        error: function (a, b, c)  ,
        data:  'Name':'Glenn','Type':'4','Meals':["1","2"] 
    );
</script>

<h2>Index</h2>

希望这会有所帮助...

【讨论】:

在 Web API,MVC 4 中,您可以简单地从动作中返回一个对象,它会根据请求返回 json 或 xml。例如IE 会得到 json,chrome 会得到 xml 结果 是的 - 我知道 Web API。当我写我的例子时,我没有在原始问题中看到那个细节。 @Habib /GlennFerrieLive 谢谢你们的帮助。我能够把它修好。不过我有一个问题,你说如果你只是用 Web API 返回一个对象,它会返回 JSON 到 IE 和 XML 到 chrome?如果您编写的客户端 javascript 解析 json 怎么办?您是否必须编写 javascript/query 才能接受其中任何一个? @user 接受标头将规定您收到的格式。这就是它的目的。您应该能够在两个浏览器中获得相同的响应。请参阅我的“$.ajaxsetup”声明中的“接受”

以上是关于C# Web 服务,如何接收 JSON的主要内容,如果未能解决你的问题,请参考以下文章

通过 Web Socket 网络在 C# 服务器上传输 JSON 字符串数据

如何从 C# Web 服务返回数据表/数据集作为 JSON

如何使用 Jersey API 从 RESTful Web 服务发送和接收 JSON 数据

C# Rest 服务 - 无法在服务方法中接收 JSON 请求

使用 REST API 从 Web 服务接收 JSON 数据

C# Web 服务不会输出 JSON,只会输出 XML