始终在 WCF 服务中返回带有 Json 的 XML 字符串

Posted

技术标签:

【中文标题】始终在 WCF 服务中返回带有 Json 的 XML 字符串【英文标题】:Always returning XML string with Json in a WCF Service 【发布时间】:2015-09-03 13:09:43 【问题描述】:

我有总是返回的 WCF 服务:

<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/"> JSON STRING </string>

我只想要 JSON STRING 片段。我在***中阅读了一些帖子并尝试了解决方案,但我无处可去。这是我的代码:

[ServiceContract]
public interface IUserService

    [OperationContract]
    [WebGet(BodyStyle = WebMessageBodyStyle.Bare, RequestFormat = WebMessageFormat.Json,
    ResponseFormat = WebMessageFormat.Json, UriTemplate = "GetUserById?x=uid")]
    string getUserByUID(string uid);

接口实现:

public class UserService : IUserService

    public string getUserByUID(string uid)
    
        UserDAO mUserDAO = UserService.getUserDAO();
        User mUser = mUserDAO.getUserByUID(Convert.ToInt64(uid));
        if (mUser != null)
        
            mUserDAO.close();
            return JsonConvert.SerializeObject(mUser);
        

网页配置:

    <behavior name="restfulBehavior">
      <webHttp />
    </behavior>

Retrofit 发出的调用:

D/Retrofit﹕ ---> HTTP GET http:http://localhost/UserService.svc/GetUserById?x=1
D/Retrofit﹕ Content-Type: application/json
D/Retrofit﹕ ---> END HTTP (no body)

从服务器返回

D/Retrofit﹕ <--- HTTP 200 http://localhost/UserService.svc/GetUserById?x=1 (92ms)
D/Retrofit﹕ Content-Length: 446
D/Retrofit﹕ Content-Type: application/xml; charset=utf-8
D/Retrofit﹕ Server: Microsoft-IIS/7.5
D/Retrofit﹕ X-Powered-By: ASP.NET
D/Retrofit﹕ Date: Thu, 18 Jun 2015 03:32:53 GMT
D/Retrofit﹕ OkHttp-Selected-Protocol: http/1.1
D/Retrofit﹕ OkHttp-Sent-Millis: 1434598232505
D/Retrofit﹕ OkHttp-Received-Millis: 1434598232588
D/Retrofit﹕ <string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">JSON STRING</string>
D/Retrofit﹕ <--- END HTTP (446-byte body)

我在这里错过了什么?

提前谢谢你。

【问题讨论】:

你如何调用你的服务? @YeldarKurmangaliyev,我正在使用改造。我添加了调用并返回数据。谢谢。 【参考方案1】:

您需要声明内容类型和接受类型才能接收 JSON 响应。

我不确定你是如何调用你的服务的。我将用 C# 编写一个示例。但是,它可以很容易地翻译成任何其他语言。

WebClient wc = new WebClient(); 
wc.Headers.Add("Content-Type", "application/json; charset=utf-8");
wc.Headers.Add("Accept", "application/json");
wc.DownloadString("http://yourUrl.com/GetUserById?x=1");

它对我有用:)

【讨论】:

我更改了调用中的标头,但服务仍然发送 。查看改造调用信息:D/Retrofit: ---> HTTP GET localhost/UserService.svc/GetUserById?x=1 D/Retrofit: Accept: application/json D/Retrofit: Content-Type: application/json; charset=utf-8 D/Retrofit:---> END HTTP(无正文)。谢谢。 @Carlos 我和你有同样的问题,但我没有在网络客户端中消费,但我正在使用 httpclient @rogue39nin,我修复了它,更改此行 return JsonConvert.SerializeObject(mUser);返回 mUser; 是的,我搞砸了,试图返回一个字符串,而不是对象,现在所有工作都很甜蜜,现在喜欢这种方式【参考方案2】:

关于这个问题,这是一个基础设施问题 FTP 没有更新站点,并且在我测试时没有反映代码中的更新。

但我发现我的代码也是错误的。您可以在下面找到现在正在工作的那个。我希望它可以帮助其他人。

public class UserService : IUserService

    public User getUserByUID(string uid)
    
        UserDAO mUserDAO = UserService.getUserDAO();
        User mUser = mUserDAO.getUserByUID(Convert.ToInt64(uid));
        if (mUser != null)
        
            mUserDAO.close();
            return mUser;
        

【讨论】:

以上是关于始终在 WCF 服务中返回带有 Json 的 XML 字符串的主要内容,如果未能解决你的问题,请参考以下文章

带有 WCF 调用的 Ajax 返回 404 错误

WCF / SVC 在使用 StreamReader 时返回 HTML 错误页面而不是 JSON

从 WCF REST Web 服务返回包装在回调函数中的 JSON

使用 JSON 实现带有 WCF 服务 (wshttpBinding) 的 c# asp.net 应用程序

在 wcf 中返回原始 json(字符串)

wcf 数据服务是不是可以返回 json 格式的元数据?