Skip to main content
 首页 » 编程设计

c#之如何防止 WebMethod 序列化 json 响应

2024年02月27日32dyllove98

我有一个返回数据的网络方法。 我有用于将我的对象序列化为 json 以忽略空值和其他目的的特定代码。

发生的事情是 .Net 再次序列化响应:

对象 = {a:2}

首次序列化 = {"a": "2"}

第二次序列化 = "{\"a\":\"2\"}"

如何防止 .Net 第二次序列化我的响应。

代码:

[WebMethod] 
[ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
public static object XXX() 
{ 
   return new { a = 2 }.ToJson(); 
} 

请您参考如下方法:

.ToJson() 调用是不必要的 - 删除它:

[WebMethod] 
public static object XXX() 
{ 
   return new { a = 2 }; 
} 

原因是 Web API serializes to JSON by default :

What Gets Serialized?

By default, all public properties and fields are included in the serialized JSON. To omit a property or field, decorate it with the JsonIgnore attribute.

因此,除非明确忽略,或者客户端调用特定的媒体格式化程序(通过 Content-Type 请求 header ),否则您的返回类型将序列化为 JSON。双重序列化是由于额外的 .ToJson() 调用而发生的。

您的 ScriptMethod 属性也是不必要的,因为 JSON 是 ScriptMethodAttribute.ResponseFormat property 的默认值.