修改WCF的默认序列化格式
来源:互联网 发布:域服务器软件分发 编辑:程序博客网 时间:2024/05/16 03:53
需求:
要用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
- 修改WCF的默认序列化格式
- 修改 Dreamweaver 的默认编码格式
- 如何修改oracle的默认日期格式
- 修改python编译器的默认编码格式
- [Extjs6] 修改默认的日期月份格式
- 修改默认编码格式
- 上传下载大点的数据文件,WCF用默认配置不能正常的序列化和反序列化
- WCF+Nhibernate 序列化的问题
- JAVA序列化与反序列化三种格式存取(默认格式、XML格式、JSON格式)
- JAVA序列化与反序列化三种格式存取(默认格式、XML格式、JSON格式)
- JAVA序列化与反序列化三种格式存取(默认格式、XML格式、JSON格式)
- JAVA序列化与反序列化三种格式存取(默认格式、XML格式、JSON格式)
- JAVA序列化与反序列化三种格式存取(默认格式、XML格式、JSON格式)
- WCF序列化
- Oracle 修改默认日期格式
- Oracle 修改默认日期格式
- mysql修改默认编码格式
- Oracle修改默认时间格式
- 回文串
- Flink实时营销分析--数据部分--项目背景(一)
- CCF201503-3 节日(100分)
- LeetCode - 345. Reverse Vowels of a String
- 蓝桥杯 回文数
- 修改WCF的默认序列化格式
- Manacher算法笔记
- (函数题)4-8 简单阶乘计算
- 网页涂鸦插件
- Codeforces Round #395 (Div. 2) C. Timofey and a tree (树的基础应用)
- DBCP连接池连接数据库
- 51Nod - 1101 背包
- try-catch以及try-catch-finally
- 用jquery开发手机app起步时遇到的问题