当然,这点对于Json.NET应该不是问题,但是它实在太复杂了,如果我能把它研究透彻并加以扩展,还不如自己重新去写一个简单的类库呢。于是,一个秋高气爽的周日下午,JsonMe就此诞生了。
JsonMe使用方式
为了实现以上的要求,在JsonMe中我将JSON转化的“合约”与类型本身分离。我很喜欢这样的策略,正如EasyMongo那样,除了一个类型可以对应多种映射策略之外,我还能将一种类型与它的映射策略解耦。例如,现在有一个User对象:
public class User { public string UserName { get; set; } public int Age { get; set; } public bool IsAdult { get { return this.Age >= 18; } } }
在进行序列化之前,需要先定义这样的“合约”(即映射策略):
var userContract = new JsonContract<User>(); userContract.SimpleProperty(u => u.UserName).Name("Name"); userContract.SimpleProperty(u => u.Age);
User类型中定义了三个属性,其中我们只采纳了两个:Age和UserName(并改名为Name)。利用这个“合约”我们可以进行JSON转化:
var user = new User { UserName = "Tom", Age = 20 }; var jsonUser = JsonSerializer.SerializeObject(user, userContract); Console.WriteLine(jsonUser);
这将会输出(已经过手动格式化):
{ "Name" : "Tom", "Age" : 20 }
同样,我们可以为某个属性运用转化规则,只要提供一个IJsonConverter对象即可:
public class Post { public string Title { get; set; } public string Content { get; set; } public DateTime CreateTime { get; set; } }
public class DataTimeConverter : IJsonConverter { public object ToJsonValue(Type type, object value) { return ((DateTime)value).ToString("R"); }
public object FromJsonValue(Type type, object value) { return DateTime.ParseExact((string)value, "R", null); } }
出处:老赵点滴
责任编辑:bluehearts
上一页 轻量级JSON映射类库 [1] 下一页 轻量级JSON映射类库 [3]
◎进入论坛网络编程版块参加讨论
|