Newtonsoft JSON.. NET与Json web服务的兼容性
本文关键字:服务 兼容性 web Json JSON NET Newtonsoft | 更新日期: 2023-09-27 18:01:45
我在想,因为我没有在任何地方找到它-
基于Json的web服务可以与Json文件结合使用吗?网上图书馆吗?
换句话说,是否有一种方法使JSON。.NET反序列化webservice的请求的JSON对象,而不是。NET默认的序列化器?
一种方法可能是声明WebMethod接受一个普通字符串,然后使用JSON。. NET的JsonConvert,将原始字符串反序列化为正确的对象,但这意味着请求的语法(来自客户端)将有点尴尬。还有其他方法或建议吗?
谢谢,
米奇
AFAIK,您必须手动完成此操作,通过让您的web服务将字符串作为参数并返回字符串作为响应。如果您使用WCF,情况就大不相同了,因为与传统的ASMX web服务相比,WCF的体系结构更具可扩展性,而传统的ASMX web服务现在被认为是一种过时的技术。
我一直在寻找使用JSON的方法。. NET来处理JSON序列化。我发现最好的方法是通过派生behavioreextensionelement类来创建WCF行为扩展。如下所示:
http://json.codeplex.com/discussions/209865using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.ServiceModel.Channels;
using System.ServiceModel.Description;
using System.ServiceModel.Web;
using System.ServiceModel.Configuration;
using System.ServiceModel.Dispatcher;
using System.Text;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
public class JsonNetBehaviorExtension : BehaviorExtensionElement
{
public class JsonNetBehavior : WebHttpBehavior
{
internal class MessageFormatter : IDispatchMessageFormatter
{
JsonSerializer serializer = null;
internal MessageFormatter()
{
serializer = new JsonSerializer();
}
public void DeserializeRequest(Message message, object[] parameters)
{
throw new NotImplementedException();
}
public Message SerializeReply(MessageVersion messageVersion, object[] parameters, object result)
{
var stream = new MemoryStream();
var streamWriter = new StreamWriter(stream, Encoding.UTF8);
var jtw = new JsonTextWriter(streamWriter);
serializer.Serialize(jtw, result);
jtw.Flush();
stream.Seek(0, SeekOrigin.Begin);
return WebOperationContext.Current.CreateStreamResponse(stream, "application/json");
}
}
protected override IDispatchMessageFormatter GetReplyDispatchFormatter(OperationDescription operationDescription, ServiceEndpoint endpoint)
{
return new MessageFormatter();
}
}
public JsonNetBehaviorExtension() { }
public override Type BehaviorType
{
get
{
return typeof(JsonNetBehavior);
}
}
protected override object CreateBehavior()
{
var behavior = new JsonNetBehavior();
behavior.DefaultBodyStyle = WebMessageBodyStyle.WrappedRequest;
behavior.DefaultOutgoingResponseFormat = WebMessageFormat.Json;
behavior.AutomaticFormatSelectionEnabled = false;
return behavior;
}
}
在你的web.config
<system.serviceModel>
<extensions>
<behaviorExtensions>
<add name="webHttpJson" type="YourNamespace.JsonNetBehaviorExtension, YourAssembly"/>
</behaviorExtensions>
</extensions>
<behaviors>
<endpointBehaviors>
<behavior name="NewtonsoftJsonBehavior">
<webHttp helpEnabled="true" automaticFormatSelectionEnabled="true"/>
<webHttpJson/>
</behavior>
</endpointBehaviors>
<behaviors>
用于REST Web服务的新的WCF Web API提供了一种使用Json的方法。. NET作为序列化器。
http://blogs.clariusconsulting.net/kzu/using-json-net-for-text-and-binary-json-payloads-with-wcf-webapi/