如何防止WebMethod序列化json响应

时间:2017-02-09 08:18:22

标签: c# json serialization webmethod

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

.Net会再次串行响应,所以:

对象= {a:2}

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

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

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

代码:

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

2 个答案:

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