我有一个返回数据的Web方法。 我有特定的代码将我的对象序列化为json,以便忽略空值和其他目的。
.Net会再次串行响应,所以:
对象= {a:2}
第一次序列化= {"a": "2"}
第二次序列化= "{\"a\": \"2\"}"
如何防止.Net第二次序列化我的响应。
代码:
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public static object XXX()
{
return new { a = 2 }.ToJson();
}
答案 0 :(得分:2)
不需要.ToJson()
来电 - 删除它:
[WebMethod]
public static object XXX()
{
return new { a = 2 };
}
原因是Web API serializes to JSON by default:
什么获取序列化?
默认情况下,所有公共属性和字段都包含在序列化的JSON中。要省略属性或字段,请使用
JsonIgnore
属性进行装饰。
因此,除非明确忽略,或者客户端调用特定的Media Formatter(通过Content-Type
请求标头),否则您的返回类型将序列化为JSON。双序列化是由于额外的.ToJson()
调用而发生的。
您的ScriptMethod
属性也是不必要的,因为JSON是ScriptMethodAttribute.ResponseFormat
property的默认值。
答案 1 :(得分:1)
您可以通过在禁用XML序列化的同时将序列化方法设置为XML来实现此目的。这将允许您返回一个简单的字符串,其中包含您自己序列化的JSON。
[ScriptMethod(ResponseFormat = ResponseFormat.Xml, UseHttpGet = false, XmlSerializeString = false)]
public static string XXX() {
return new { a = 2 }.ToJson();
}