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

本文关键字:JSON 返回 对象 WebMethod | 更新日期: 2023-09-27 18:33:24

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

例如,您有以下返回Person对象的 WebMethod:

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

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

ASP.NET 是如何自动做到这一点的?它是否使用 JavaScriptSerializer 类?

此外,您还会看到许多使用 JSON 转换器将类对象转换为 json 对象的示例。这是为什么呢?是因为它使用的JavaScriptSerializer类及其糟糕的性能还是...?

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

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();
}

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