gpt4 book ai didi

wcf - 如何将 Json.Net 设置为 WCF REST 服务的默认序列化程序

转载 作者:行者123 更新时间:2023-12-03 11:28:09 25 4
gpt4 key购买 nike

是否可以在序列化/反序列化实体时覆盖默认的 WCF DataContractSerializer 行为并改用 JSON.NET?

我有以下处理城市实体的服务契约(Contract)。出于设计原因,City 实体具有 IsReference=true,因此默认的 DataContractSerializer 会引发错误。

对于“GET”方法,我可以使用 JsonConvert.DeserializeObject 来处理这种情况,但使用“PUT、POST、DELETE”方法时,DataContractSerializer 具有优先权,并且无​​法提示 IsReference 实体无法序列化。

我找到了这个 Post实现 IOperationBehavior 并提供我自己的序列化程序,但我不知道如何将 Json.NET 与此集成。我相信应该有更直接的方法来解决这个问题。

我将不胜感激有关此方案的任何帮助或指导,或对其他方法的建议。

[ServiceContract]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
public class CityService
{
[Description("Get all Cities")]
[WebGet(UriTemplate = "")]
public Message Cities()
{

}

[Description("Allows the details of a single City to be updated.")]
[WebInvoke(UriTemplate = "{code}", Method = "PUT")]
public Message UpdateCity(string code, City city)
{
}
}

非常感谢

霍萨姆

最佳答案

使用扩展编码器和序列化器(参见 http://msdn.microsoft.com/en-us/library/ms733092.aspx)或其他扩展 WCF 的方法,如使用 DataContractSerializerOperationBehavior很有趣,但是对于您的特殊问题,有更简单的解决方法。

如果您已经使用 Message键入以返回结果,使用 WCF4 您可以执行以下操作:

public Message UpdateCity(string code, City city)
{
MyResponseDataClass message = CreateMyResponse();
// use JSON.NET to serialize the response data
string myResponseBody = JsonConvert.Serialize(message);
return WebOperationContext.Current.CreateTextResponse (myResponseBody,
"application/json; charset=utf-8",
Encoding.UTF8);
}

如果出现错误(如 HttpStatusCode.UnauthorizedHttpStatusCode.Conflict )或其他需要设置 HTTP 状态码的情况(如 HttpStatusCode.Created ),您可以继续使用 WebOperationContext.Current.OutgoingResponse.StatusCode .

作为替代方案,您也可以返回 Stream (见 http://blogs.msdn.com/b/carlosfigueira/archive/2008/04/17/wcf-raw-programming-model-web.aspxhttp://msdn.microsoft.com/en-us/library/ms732038.aspx )而不是 Message返回任何数据,无需 Microsoft JSON 序列化程序进行额外的默认处理。如果是 WCF4,您可以使用 CreateStreamResponse (见 http://msdn.microsoft.com/en-us/library/dd782273.aspx )而不是 CreateTextResponse .如果您将使用此技术生成响应,请不要忘记在写入流后将流位置设置为 0。

关于wcf - 如何将 Json.Net 设置为 WCF REST 服务的默认序列化程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3118504/

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