需求:

        要就此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

         

 

 

         

 

         

        

         

相关文章

网站地图xml地图