最近在学习FyiReporting的源码,参考FyiReporting的报表对象定义,结合自己在工作中开发报表的应用场景,自己设计了一套报表对象定义,实现在报表设计器中报表对象的修改,通过序列化成Json对象来达到存储报表对象,相对于FyiReporting报表直接对报表定义的XML操作省去编写大量直接解析XML文档的方法,可能会带来点效率损失。本文主要目的在总结自己在序列化对象的时候对类信息标记常用用法,不在于对FyiReporting做过多探讨。首先自己写的Json序列化操作的类:
class JsonSerialize<T> { /// <summary> /// 序列化 /// </summary> /// <param name="t"></param> public string Serialize( T t) { string jsonStr; using (MemoryStream ms = new MemoryStream()) { DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(T)); jsonSerializer.WriteObject(ms,t); jsonStr = Encoding.UTF8.GetString(ms.ToArray()); } return jsonStr; } /// <summary> /// 反序列化 /// </summary> /// <param name="jsonStr"></param> /// <returns></returns> public T DeSerialize(string jsonStr) { if(jsonStr == null) throw new SerializationException("Json串为空"); DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(T)); using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonStr))) { return (T)jsonSerializer.ReadObject(ms); } } }
对Json的序列化和反序列化,需要添加对using System.Runtime.Serialization程序集的引用。
报表对象的粗略类图展示如下:
报表定义对象包含的主要对象ReportDefine主要组成如图所示,大致反应一个报表对象主要包含的新信息,该对象基本包含类关系的比较复杂关系(多态的序列化标记和数组序列化标记等),对Json序列化具体实现不明白可参看后面附上的Demo.正如前面所说,这篇随笔为方便自己用到Json序列化的时候有忘记的时候,提供自己复习参考,在此也提供给有需要的园友们参考,没有啥高深地方可以学习。在此,附上Demo供大家参考。
下次用时间给大家附上关于FyiReporting的表达式引擎的分析的文章和简单Demo供有兴趣的园友学习学习。