gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 01:35:08 24 4
gpt4 key购买 nike

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

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

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

return p;
}

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

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

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

最佳答案

How did ASP.NET do this automatically?

基本上,在 Web 和 WebMethod 之间有一些代码接收请求,弄清楚它在请求什么,找到您的 WebMethod 并获得结果,然后根据请求 header 中可接受的格式将其序列化回客户端。

Does it uses the JavaScriptSerializer class?

可能吧。我找不到任何说明它的东西。但它不使用任何第三方库。由于这是内置的,所以这是一个很好的假设。

Also you see a lot of examples of using JSON converters to convert your class object to a json object. Why is this? Is it because of the JavaScriptSerializer class it uses and its bad performance or... ?

WebMethod 技术可能非常挑剔,有时会拒绝返回 JSON,尽管有接受 header 。解决这个问题的一种方法是做这样的事情:

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

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

关于c# - WebMethod 自动将类对象作为 JSON 返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27316943/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com