将会输出:
{ "Name" : "Default", "Author" : { "Name" : "Jerry", "Age" : 15 }, "Posts" : [ { "Title" : "Post 1", "CreateTime" : "Fri, 01 Jan 2010 00:00:00 GMT" }, { "Title" : "Post 2", "CreateTime" : "Mon, 01 Feb 2010 00:00:00 GMT" }, { "Title" : "Post 3", "CreateTime" : "Mon, 01 Mar 2010 00:00:00 GMT" } ] }
当然,您同样可以定义一个匿名对象作为JSON输出:
var value = new { v = JsonSerializer.SerializeObject(category, categoryContract) }; Console.WriteLine(JsonSerializer.Serialize(value));
是不是很简单?
更多讨论
以上代码只是演示了序列化成JSON的功能,但是您应该也可以了解反序列化的使用方式。目前JsonMe的功能就只有这么多,可以说非常简单,但是我认为已经基本够用,甚至在大部分情况下完整代替JavaScriptSerializer和DataContractJsonSerialzier是没有什么问题的。
开发JsonMe恰好花了我五个小时(下午2点到7点),只有几百行代码(当然还很粗糙),大部分还是用于合约配置的“骨架”,真正进行对象属性的赋值和转化的代码只有一百多行。JsonMe能够如此简约的原因,是因为站在JavaScriptSerializer的肩膀上。说实话,JavaScriptSerializer其实提供了一个很好的基础,因为它可以将一段JSON字符串转化为Dictionary<string, object>与object数组间的嵌套,这正是JSON格式的本质。当然,为了实现简单,我在JsonMe中创建了JsonObject和JsonArray两个对象,分别继承Dictionary<string, dynamic>和List<dynamic>,它们便作为JSON结构的表现形式。
不过我也意识到,JavaScriptSerializer可能并不是一个合适的选择,因为这会让我们依赖System.Web.Extensions.dll。事实上在.NET平台上有一个更独立,更简单的JSON结构实现,那就是Silverlight中的System.Json.dll。只可惜我们只能用它开发Silverlight程序。我打算在合适的时候,将mono中的System.Json.dll实现移植到.NET 3.5中,这样JsonMe就可以摆脱对System.Web.Extensions.dll的依赖,并摆脱自定义的JsonObject和JsonArray,可以直接使用System.Json里的结构。更重要的是,这可以让JsonMe作用在Silverlight,甚至是基于MonoTouch的iOS开发中(很有可能还包括未来的MonoDroid)。
如果您感兴趣的话,也不妨获取JsonMe的源代码和简单示例,修改修改,尝试尝试。我认为它还是相当实用的。
本文链接:http://www.blueidea.com/tech/program/2010/8019.asp
出处:老赵点滴
责任编辑:bluehearts
上一页 轻量级JSON映射类库 [3] 下一页
◎进入论坛网络编程版块参加讨论
|