修改.NET .asmx Web服务以返回JSON而不是XML

时间:2011-08-10 18:03:16

标签: .net web-services asmx

我在.NET中创建了一个简单的.asmx Web服务,如下所示:

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string Foo(string name)
{
    var customer = new {Name = name}; 

    JavaScriptSerializer json = new JavaScriptSerializer();
    return json.Serialize(customer); 
}

当我调用此服务时,它返回XML而不是JSON结果。我的iOS客户端有一个期望JSON格式的字典。

如何让.NET服务返回JSON格式而不是XML?

字典永远不会被填充,因为.Net服务返回XML而不是JSON。

- (void)requestFinished:(ASIHTTPRequest *)request
{
    NSLog(@"status code %d",request.responseStatusCode);

    if(request.responseStatusCode == 200) 
    {
        NSString *responseString = [request responseString];
        NSDictionary *responseDict = [responseString JSONValue];

        NSLog(@"%@",[responseDict objectForKey:@"name"]);    

    }

    NSLog(@"request finished");
}

我也在设置内容类型,如下所示:

 ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url]; 
    [request addRequestHeader: @"Content-Type" value: 
     @"application/json; charset=utf-8"]; 
    [request setPostValue:@"mama" forKey:@"name"];

    [request setDelegate:self]; 
    [request startAsynchronous]; 

我得到的回复是:

<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://tempuri.org/">{"Name":"mama"}</string>

1 个答案:

答案 0 :(得分:4)

我严格掌握iOS的知识以及正确的语法是什么,但为了让ASMX Web服务返回JSON,您需要使用HTTP POST动词调用它,并将Content-Type请求标头设置为{{ 1}}(从你的代码中看不到这一点)。它还会使用application/json属性预先结果,例如:

d