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>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM