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,将原始字符串反序列化为正确的对象,但这意味着请求的语法(来自客户端)将有点尴尬。

还有其他方法或建议吗?

谢谢,

米奇

Newtonsoft JSON.. NET与Json web服务的兼容性

AFAIK,您必须手动完成此操作,通过让您的web服务将字符串作为参数并返回字符串作为响应。如果您使用WCF,情况就大不相同了,因为与传统的ASMX web服务相比,WCF的体系结构更具可扩展性,而传统的ASMX web服务现在被认为是一种过时的技术。

我一直在寻找使用JSON的方法。. NET来处理JSON序列化。我发现最好的方法是通过派生behavioreextensionelement类来创建WCF行为扩展。如下所示:

http://json.codeplex.com/discussions/209865

using 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/