WebMethod自动将类对象作为JSON返回

谁能解释一下ASP.NET如何处理从WebMethods中的类对象到JSON对象的转换?

例如,您有以下WebMethod,它返回一个Person对象:

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

在我调用WebMethod的jQuery中,我得到一个包含json对象的响应。

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

您还可以看到很多使用JSON转换器将类对象转换为json对象的示例。 为什么是这样? 是因为它使用的JavaScriptSerializer类及其糟糕的性能还是……?

ASP.NET是如何自动完成的?

基本上,Web和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(); } 

您丢失了内容协商(除非您通过检查请求标头手动实现它),但您可以更好地控制它的序列化方式。