开发者

WCF + Json = wrong serialization

开发者 https://www.devze.com 2022-12-19 12:12 出处:网络
Why this WCF 3.5 method [ServiceContract] [AspNetCompatibilityReq开发者_开发百科uirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]

Why this WCF 3.5 method

[ServiceContract]
[AspNetCompatibilityReq开发者_开发百科uirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class Json
{
    [OperationContract]
    [WebGet(ResponseFormat = WebMessageFormat.Json)]
    public string Upper(string text)
    {
        return text.ToUpper();
    }
}

returns {"d":"TEXT"} ?

It should returns {"TEXT"}

I'm calling using jQuery.

    $("#upper").click(function() {
        $.ajax({
            type: "GET",
            url: "/Json.svc/Upper?text="+$("#input1").val(),
            success: function(data) {
                $("#input1").val(data.d);
            }
        });
    });


This is a security feature that has been added to the JSON serialization in .NET 3.5. It's a container object, so instead of, say, results[0], you would just say results.d[0]. Read this article for more information.


I'm assuming you are using <enableWebScript/> in your behavior config, replace that with <webHttp defaultOutgoingResponseFormat="Json"/> and you will get json without the root "d" and without the "__type" props.

However, I've only tested this in 4.0

I also don't use any attributes in code.


Have you tried changing the BodyStyle property of your [WebGet] Attribute so that responses aren't wrapped?

0

精彩评论

暂无评论...
验证码 换一张
取 消