zoukankan      html  css  js  c++  java
  • WCF: 以Json格式返回对象

    1、先建一个WCF Service

    建一个ServiceContract接口 1 [ServiceContract]

     

    public interface IJsonWCFService
     {
         /// <summary>
         /// GetJsonResult
         /// </summary>
         /// <param name="name"></param>
         /// <param name="address"></param>
         /// <param name="phone"></param>
         /// <remarks>
         /// 为实现Json序列化,添加属性
         /// [WebInvoke(ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped)]
         /// </remarks>
         /// <returns></returns>
         [OperationContract]
         [WebInvoke(ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped)]
         JsonResult GetJsonResult(string name, string address, string phone);
     }

     

    实现这个接口

    public class JsonWCFService : IJsonWCFService
     {
         #region IJsonWCFService Members
         /// <summary>
         /// Implement the interface
         /// </summary>
         /// <param name="name">Name</param>
         /// <param name="address">Address</param>
         /// <param name="phone">PhoneNumber</param>
         /// <returns>JsonResult</returns>
         public JsonResult GetJsonResult(string name, string address, string phone)
         {
             JsonResult result = new JsonResult(name, address, phone);
             return result;
         }
         #endregion
     }

    一个返回的DataContract类

    [DataContract]
     public class JsonResult
     {
         /// <summary>
         /// Construct
         /// </summary>
         public JsonResult(string name, string address, string phone)
         {
             _name = string.Format("Name:{0}", name);
             _address = string.Format("Address:{0}", address);
             _phoneNumber = string.Format("PhoneNubmer:{0}", phone);
         }
     
         private string _name;
         /// <summary>
         /// Name
         /// </summary>
         [DataMember]
         public string Name
         {
             get { return _name; }
             set { _name = value; }
         }
         private string _address;
         /// <summary>
         /// Address
         /// </summary>
         [DataMember]
         public string Address
         {
             get { return _address; }
             set { _address = value; }
         }
         private string _phoneNumber;
         /// <summary>
         /// PhoneNumber
         /// </summary>
         [DataMember]
         public string PhoneNumber
         {
             get { return _phoneNumber; }
             set { _phoneNumber = value; }
         }

    2、为实现Json序列化设置,我们还得添加一个WebContentTypeMapper

    (此类最终会用在Service的配置文件中)

    using System.ServiceModel.Channels;
     
     namespace Microsoft.Ajax.Samples
     {
         /// <summary>
         /// JsonContentTypeMapper
         /// 用在配置中<webMessageEncoding webContentTypeMapperType="Microsoft.Ajax.Samples.JsonContentTypeMapper, JsonContentTypeMapper, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null">
         /// </summary>
         public class JsonContentTypeMapper : WebContentTypeMapper
         {
             public override WebContentFormat GetMessageFormatForContentType(string contentType)
             {
                 if (contentType == "text/javascript")
                 {
                     return WebContentFormat.Json;
                 }
                 else
                 {
                     return WebContentFormat.Default;
                 }
             }
         }
     }

    3、添加svc文件,便于发布Service

    svc文件其实是十分简单的一个文件,以下是SVC文件中的内容,可以将此文件添加在网站项目的根目录,也可以是一个子目录。对此没有太多的要求。

     <%@ ServiceHost Language="C#" Debug="true" Service="JsonWCFService" %>

    4、添加web.config文件

    WCFService中相当一部分知识是关于配置的

     

    <?xml version="1.0"?>
     <configuration>
       <appSettings/>
       <connectionStrings/>
       <system.web>
     
       </system.web>
       <system.serviceModel>
         <behaviors>
           <endpointBehaviors >
             <behavior name="jsonWcfBehavior">
               <webHttp/>
             </behavior>
           </endpointBehaviors>
         </behaviors>
         <bindings>      
           <customBinding>        
             <binding name="JsonMapper">
               <!--此处配置相当重要,使用了我们编写的JsonContentTypeMapper类,约定返回值类型是Json-->
               <webMessageEncoding webContentTypeMapperType="Microsoft.Ajax.Samples.JsonContentTypeMapper, JsonContentTypeMapper, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null">
               </webMessageEncoding>
               <httpTransport manualAddressing="true"/>
             </binding>
           </customBinding>
         </bindings>
         <services>      
           <service name="JsonWCFService" >
             <!--注意此处的endpoint配置,address和contract两个属性,在客户端Js调用时会用的上-->
             <endpoint address="ajaxEndpoint" behaviorConfiguration="jsonWcfBehavior"
                       binding="customBinding"
                       bindingConfiguration="JsonMapper" contract="IJsonWCFService">
             </endpoint>
           </service>
         </services>
       </system.serviceModel>
     </configuration>

     

     

  • 相关阅读:
    C#数据结构与算法系列(十三):递归——迷宫问题
    C#数据结构与算法系列(十二):递归(Recursion)
    C#数据结构与算法系列(十一):中缀表达式转后缀表达式
    C#数据结构与算法系列(十):逆波兰计算器——逆波兰表达式(后缀表达式)
    Quartz.Net系列(八):Trigger之CalendarIntervalScheduleBuilder详解
    Quartz.Net系列(七):Trigger之SimpleScheduleBuilder详解
    C#数据结构与算法系列(九):栈实现综合计算器(中缀表达式)
    Redis系列(五):数据结构List双向链表源码解析和API实现
    Quartz.Net系列(六):Quartz五大构件Trigger之TriggerBuilder解析
    C#数据结构与算法系列(八):栈(Stack)
  • 原文地址:https://www.cnblogs.com/Fooo/p/2534415.html
Copyright © 2011-2022 走看看