程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> 如何修改WCF的默認序列化格式

如何修改WCF的默認序列化格式

編輯:關於.NET

需求:

要用WCF生成 Restful風格的接口,返回 JOSN格式:

{
    "AInfo": {
        "Code": "1",
        "Description": ""
    },
    "BInfo": {
        "Code": "1",
        "Description": ""
    },
    "CInfo": {
        "UserGuid": "userguid",
        "UserName": "username",
        "DanWeiGuid": "danweiguid",
        "DanWeiName": "danweiname"
    }
}

 過程:

1.使用 WCF的 webHttp  綁定。

2.為了增加程序編碼的靈活性,使用了有弱類型特性的 Dictionary<string,object>來作為json字符串對應的類。

new Dictionary<string,object>
{
    {"AInfo", new Dictionary<string,string>
                    {
                        {"Code","1"},
                        {"Description",""}
                    }
    },
    {"BInfo", new Dictionary<string,string>
                    {
                        {"Code","1"},
                        {"Description",""}
                    }
    },
    {"CInfo", new Dictionary<string,string>
                    {
                        {"UserGuid","UserGuid"},
                        {"UserName","UserName"},
                        {"DanWeiGuid","DanWeiGuid"},
                        {"DanWeiName","DanWeiName"}
                    }
    }
}

3.WCF 默認的序列化不支持 Dictionary 。

 4.修改WCF 傳入參數與返回參數的格式。支持 string 傳入,string返回。

具體實現:

webconfig 配置,增加extensions,指向修改後的  JsonBehaviorExtension

<extensions>
                 <behaviorExtensions>
                 <add name="JsonBehavior" type="JsonBehavior.Json.JsonBehaviorExtension,JsonBehavior"/>
                </behaviorExtensions>
          </extensions>

 public class JsonBehaviorExtension : BehaviorExtensionElement
    {
        public override Type BehaviorType
        {
            get { return typeof(JsonBehavior); }
        }

        protected override object CreateBehavior()
        {
            return new JsonBehavior();
        }
    }

這是我們選擇序列化工具的一個入口。接下來可以使用我們自己寫的 JsonBehavior。 public class JsonBehavior : WebHttpBehavior{}

在這裡我們要重寫 GetRequestDispatchFormatter,GetReplyDispatchFormatter。轉到自己的 JsonDispatchFormatter, 在這個類裡面就有了我們需要DeserializeRequest,和  SerializeReply。我們增加一個邏輯,如果是 typeof(string) 那就不作處理。

傳入參數    if (operation.Messages[0].Body.Parts[0].Type == typeof(string))
                {
                    parameters[0] = Encoding.UTF8.GetString(rawBody);
                }

返回參數    if (operation.Messages[1].Body.ReturnValue.Type == typeof(string))
               {
                  body = Encoding.UTF8.GetBytes((string)result);
               }

這樣就可以了。   input  string   →   output string 。 序列化的過程開放出來了,可以選擇適合自己的序列化工具了。

完整代碼: https://github.com/qianch/JsonWCF

來源:http://www.cnblogs.com/EllisQian/p/6358288.html

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved