代码之家  ›  专栏  ›  技术社区  ›  Justin Niessner

禁用wcf json服务中的类型提示

  •  14
  • Justin Niessner  · 技术社区  · 14 年前

    我有一个相对简单的问题,似乎找不到答案。

    当wcf对对象执行序列化时,它会自动应用类型提示。对于JSON服务,这会在调用的每个复杂对象上产生一个额外的字段 __type . 定义为:

    [DataContract]
    public class SomeObject
    {
        [DataMember]
        public string First { get; set; }
    
        [DataMember]
        public string Last { get; set; }
    }
    

    将序列化为:

    {
        "First" : "Hello",
        "Last" : "World!",
        "__type" : "SomeObject#MyNamespace.SomeObject"
    }
    

    通常这不是问题。不幸的是,当您开始将类嵌套到相当大和复杂的结构中时,这会导致返回到客户机的JSON响应的巨大开销。

    当然,必须有一种方法来阻止这种行为,但我还没有找到一种方法(两者都没有 Rick Strahl back in 2007 …但现在是2010年,我希望有人能解决这个问题)。

    3 回复  |  直到 14 年前
        1
  •  5
  •   Dan Atkinson    12 年前

    使用 DataContractJsonSerializer 这样做是为了支持多态性,并且能够反序列化回已知的类型。NewtonSoft是第三方JSON序列化程序,它不会添加_uu类型提示。如果只是序列化而不使用真正的高级数据合同属性,那么您可能需要尝试一下。

        2
  •  7
  •   JeremyWeir    13 年前

    我假设你在使用 <enableWebScript/> 在行为配置中,将其替换为 <webHttp defaultOutgoingResponseFormat="Json"/> 你会得到干净漂亮的JSON

        3
  •  3
  •   Yi Jiang G-Man    13 年前

    这对我有好处:

    [WebGet(ResponseFormat=WebMessageFormat.Json,BodyStyle = WebMessageBodyStyle.Bare)]
    

    参见步骤7和10 http://dotnetdiscoveries.blogspot.com/2008/05/return-json-from-ajax-enabled-wcf.html