自己实现的JSON序列化 反序列化程序库 (C# .NET)
实现的框架有很大的问题,可以下载去吐槽,但是别用。解决以下这个需求的方案(屏蔽敏感数据),可以参考以下文章:
http://www.cnblogs.com/lijianzhq/articles/8406880.html
(1)需求起源
最近工作需要,遇到一个JSON序列化的需求,Newtonsoft.Json 这个类库找了好久都找不到解决方案。所以自己硬着头皮写了一个JSON序列化和反序列化的类库。造了一下轮子。
我遇到的需求是:
在序列化的过程中,需要对对象的属性值进行统一的处理,所以在序列化某个对象的属性值的时候,需要回调我的一个处理方法,让我重新计算属性的值(例如我要屏蔽某些敏感的属性值);
在反序列化的时候,我要根据属性值去决定某些事情(例如根据属性值去决定序列化的目标类型),我要把对象的属性值同时写入到其他地方(例如缓存);
然而在 Newtonsoft.Json 实在不知道怎么搞,当时代码都看了一下,貌似他们没有回调的处理。
如果高手们知道怎么用 Newtonsoft.Json 这个类库来解决这个需求,望赐教,谢谢。
(2)调用Demo:
//序列化的处理
JSONSerializer jsonHelper = new JSONSerializer(); JSONSerializeSetting setting = new JSONSerializeSetting();
//这里,我在序列化的时候,回调我的方法GetValueFromDataCache,从其他地方获取属性值并返回给序列化引擎 setting.ValueFormatting += GetValueFromDataCache; //打包发送到服务器的数据 String json = jsonHelper.Serialize(requestObj); //打包记录日志的报文数据
//在这里,需要记录日志的时候,我不能直接把发送到服务器端的数据直接记录日志,我需要对某些敏感的属性字段的值屏蔽 setting.ValueFormatting += FormatMaskField;
String jsonForLog = jsonHelper.Serialize(requestObj, setting); WriteLog(jsonForLog);
//反序列化的处理
JSONSerializer jsonHelper = new JSONSerializer(); Object obj = jsonHelper.DeSerialize(receiveJSONString, typeof(Response.ResponseObj), new JSONSerializeSetting() {
//在这里,我增加了一个处理:反序列化的时候回调我的方法去计算真正的目标类型;
//就是说我在序列化的时候不确定序列化成哪个类型的实例,而是根据实际的数据(数据决定了实例的类型),再去决定序列化成哪个类型的实例 CalculateDeSerializeType = DoCalculateDeSerializeType,
//在这里,序列化的过程中,我同时把某些属性值,设置到其他地方(缓存) ValueFormatting = SetValueToDataCache }); responseObj = obj as Response.ResponseObj;
//下面是记录日志的时候,敏感数据的屏蔽,跟序列化的一样了 String jsonForLog = jsonHelper.Serialize(obj, new JSONSerializeSetting() { ValueFormatting = FormatMaskField }); WriteLog(jsonForLog);
(3)程序源码:

浙公网安备 33010602011771号