public static class jsonserializer { private static itracing _tracing = tracingmanager.gettracing(typeof(jsonserializer)); /// /// 将指定对象序列化为 javascript 对象表示法 (json) 数据,并将生成的 json 写入流中。 /// /// 对象类型 /// 流对象 /// 序列化对象 public static void serialize(stream stream, t obj) { jsonserializeproxy.default.serialize(stream, obj); } /// /// 将指定对象序列化为 javascript 对象表示法 (json) 数据,并返回对应的字符串。 /// /// 对象类型 /// 序列化对象 /// javascript 对象表示法 (json) 字符串 public static string serialize(t obj) { using (memorystream ms = new memorystream()) { jsonserializeproxy.default.serialize(ms, obj); string jsonstr = encoding.utf8.getstring(ms.toarray()); _tracing.infofmt({0} json serialize result: {1}, typeof(t).tostring(), jsonstr); return jsonstr; } } public static t deserialize(string jsonstr) { return jsonserializeproxy.default.deserialize(jsonstr); } } public class jsonserializeproxy { private static readonly jsonserializeproxy _default = new jsonserializeproxy(); private datacontractjsonserializer _serializer; public static jsonserializeproxy default { get { return _default; } } private jsonserializeproxy() { _serializer = new datacontractjsonserializer(typeof(t)); } public void serialize(stream stream, t obj) { _serializer.writeobject(stream, obj); } /// /// 将json字符串反序列化为对象 /// /// json字符串 /// public t deserialize(string jsonstr) { memorystream ms = new memorystream(encoding.utf8.getbytes(jsonstr)); t obj = (t)_serializer.readobject(ms); return obj; } }
