2014-12-05 93 views
4

任何人都可以向我解释ASP.NET如何处理从类对象到WebMethods中的JSON对象的转换?WebMethod自动将类对象作为JSON返回

例如,你有以下的WebMethod返回一个Person对象:

[WebMethod] 
    public static Person GetPerson() 
    { 
     Person p = new Person() 
     { 
      Id = 1, 
      Name = "Test" 
     }; 

     return p; 
    } 

在我的jQuery在那里我打电话的WebMethod,我得到它包含了一个JSON对象的响应。

ASP.NET如何自动执行此操作?它是否使用JavaScriptSerializer课程?

此外,您还看到很多使用JSON转换器将您的类对象转换为json对象的示例。为什么是这样?是因为它使用的JavaScriptSerializer类,它的糟糕表现还是...?

+1

附注:'WebMethod'不再被支持。如果您需要基于JSON或XML的API,最好查看[ASP.NET Web API](http://www.asp.net/web-api),它使用Newtonsoft的Json.NET来处理JSON序列化。 – mason 2014-12-05 13:35:30

+0

我正在使用ASP.NET Webforms,我有一些Ajax调用,我可以在我的webforms项目中使用Web API吗? – Mivaweb 2014-12-05 13:39:46

+0

是的!你当然可以。微软有这个倡议称为[One ASP.NET](http://channel9.msdn.com/Events/Visual-Studio/Launch-2013/WC103)。基本上所有的服务都应该得到相同的功能(如果适用),你可以混合和匹配你的项目。实际上,我开始使用Web窗体的Web API,但现在我正在学习MVC。它基本上就像添加一个NuGet包一样简单,配置一些路由,然后你几乎可以将你的Web方法代码复制到Web API函数中。请参阅我的第一个评论中的链接,了解入门步骤。 – mason 2014-12-05 13:42:26

回答

3

ASP.NET如何自动执行此操作?

基本上有一些代码的网页,并且接受请求将WebMethod之间坐着,计算出它的要求是什么,找到你的WebMethod和取得的成绩,再序列回基于可接受的格式客户端请求标头。

它使用JavaScriptSerializer类吗?

也许。我没有找到任何说明它的地方。但它不使用任何第三方库。由于这是一个内置的,这是一个很好的假设。

此外,您还看到很多使用JSON转换器将 类对象转换为json对象的示例。为什么是这样?是否因为它使用的 JavaScriptSerializer类以及其性能不佳或...?

WebMethod技术可以非常挑剔,有时会拒绝返回JSON,尽管接受标头。围绕一个办法是做这样的事情:

[WebMethod] 
public static void GetPerson() 
{ 
    Person p = new Person() 
    { 
     Id = 1, 
     Name = "Test" 
    }; 
    HttpContext.Current.Response.ResponseType = "application/json"; 
    HttpContext.Current.Response.Write(JsonConvert.SerializeObject(p)); 
    HttpContext.Current.Response.End(); 
} 

你失去了谈判的内容(除非你手动实现它通过检查请求头),但你得到了它是如何序列化的更多的控制。

+0

你说'WebMethod技术可以非常挑剔,有时会拒绝返回JSON'。这是否包含其他转换库,如JSON.NET? – Mivaweb 2014-12-05 15:48:32

+0

当我说拒绝返回JSON时,我的意思是它忽略了请求标题并将其序列化为XML。这与您使用的是哪个JSON序列化程序无关,它与WebMethod实现如何在幕后编码有关。 – mason 2014-12-05 15:49:49

+0

所以为了简短起见,创建没有返回类型的WebMethods并使用转换器将结果写回响应流将是最佳做法。或者使用ASP.NET Web API? – Mivaweb 2014-12-05 15:52:24