gpt4 book ai didi

c# - wcf 3.5 REST 服务适用于 XML 但不适用于 JSON 响应格式

转载 作者:行者123 更新时间:2023-11-30 22:44:15 27 4
gpt4 key购买 nike

我有一个服务契约(Contract),其中定义了多个操作契约(Contract)。我添加了一个新端点以将我的操作公开为一个 Restful 网络服务。此外,我已经更新了操作定义,以便可以以 RESTful 方式调用它们

    [OperationContract]
[WebInvoke(
Method = "GET",
ResponseFormat = WebMessageFormat.Xml,
BodyStyle = WebMessageBodyStyle.Bare,
UriTemplate = "product/getall")]
Product[] GetAll()

一切正常,我的产品以 XML 格式返回...但我想改用 JSON。如果我将代码更改为

[OperationContract]
[WebInvoke(
Method = "GET",
ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Bare,
UriTemplate = "product/getall")]
Product[] GetAll()

对 product/getall 调用的响应为空。没有抛出异常,但我有一种不好的感觉,即 WCF JSON 实现无法以某种方式处理序列化。任何人有类似的问题?有什么建议么?是否可以使用 JSON.NET 来序列化/反序列化我的对象?

最佳答案

我能够让它发挥作用 - 这就是我所做的。首先,我的环境是 VS2010,我使用的是 VS 网络服务器 (Cassini)。

我没有更改您的方法签名或您的 WebInvoke 属性。 GetAll() 方法的主体是这样的:

[OperationContract]
[WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Bare, UriTemplate = "product/getall")]
Product[] GetAll()
{
Product[] prods = new Product[3] {
new Product() { Name="Foo", Desc="Bar"},
new Product() {Name="Ha", Desc="Ho"},
new Product() {Name="Who", Desc="What"}
};

return prods;
}

web.config 看起来像这样:

<system.serviceModel>
<behaviors>
<endpointBehaviors>
<behavior name="WebApplication2.ProdServiceAspNetAjaxBehavior">
<webHttp />
</behavior>
</endpointBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"
multipleSiteBindingsEnabled="true" />
<services>
<service name="WebApplication2.ProdService">
<endpoint address="" behaviorConfiguration="WebApplication2.ProdServiceAspNetAjaxBehavior"
binding="webHttpBinding" contract="WebApplication2.ProdService" />
</service>
</services>
</system.serviceModel>

老实说,其中大部分是默认的开箱即用功能。我唯一更改的是更改 endpointBehavior 以使用 webHttp 而不是默认的 enableWebScript。除此之外,它运行良好。

编辑(忘记了 Product 类):这是 Product 类 - 我用 DataContractDataMember 属性装饰它:

[DataContract]
public class Product
{
[DataMember()]
public String Name { get; set; }
[DataMember()]
public String Desc { get; set; }
}

这是我的输出:

[{"Desc":"Bar","Name":"Foo"},{"Desc":"Ho","Name":"Ha"},{"Desc":"What","Name":"Who"}]

我的猜测是您在 web.config 中使用了 enableWebScript。将其更改为 webHttp 并查看会发生什么。 enableWebScript 设置用于更多 ASMX 类型的兼容性(我相信)。如果您要返回 JSON(我的很多 GET 服务方法都会这样做),请使用 webHttp(这是我习惯使用的)。

让我知道您得到了什么,我会相应地更新我的答案。

关于c# - wcf 3.5 REST 服务适用于 XML 但不适用于 JSON 响应格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3504544/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com