當(dāng)然,這點(diǎn)對(duì)于Json.NET應(yīng)該不是問(wèn)題,但是它實(shí)在太復(fù)雜了,如果我能把它研究透徹并加以擴(kuò)展,還不如自己重新去寫(xiě)一個(gè)簡(jiǎn)單的類(lèi)庫(kù)呢。于是,一個(gè)秋高氣爽的周日下午,JsonMe就此誕生了。
JsonMe使用方式
為了實(shí)現(xiàn)以上的要求,在JsonMe中我將JSON轉(zhuǎn)化的“合約”與類(lèi)型本身分離。我很喜歡這樣的策略,正如EasyMongo那樣,除了一個(gè)類(lèi)型可以對(duì)應(yīng)多種映射策略之外,我還能將一種類(lèi)型與它的映射策略解耦。例如,現(xiàn)在有一個(gè)User對(duì)象:
public class User { public string UserName { get; set; } public int Age { get; set; } public bool IsAdult { get { return this.Age >= 18; } } }
在進(jìn)行序列化之前,需要先定義這樣的“合約”(即映射策略):
var userContract = new JsonContract<User>(); userContract.SimpleProperty(u => u.UserName).Name("Name"); userContract.SimpleProperty(u => u.Age);
User類(lèi)型中定義了三個(gè)屬性,其中我們只采納了兩個(gè):Age和UserName(并改名為Name)。利用這個(gè)“合約”我們可以進(jìn)行JSON轉(zhuǎn)化:
var user = new User { UserName = "Tom", Age = 20 }; var jsonUser = JsonSerializer.SerializeObject(user, userContract); Console.WriteLine(jsonUser);
這將會(huì)輸出(已經(jīng)過(guò)手動(dòng)格式化):
{ "Name" : "Tom", "Age" : 20 }
同樣,我們可以為某個(gè)屬性運(yùn)用轉(zhuǎn)化規(guī)則,只要提供一個(gè)IJsonConverter對(duì)象即可:
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); } }
出處:老趙點(diǎn)滴
責(zé)任編輯:bluehearts
上一頁(yè) 輕量級(jí)JSON映射類(lèi)庫(kù) [1] 下一頁(yè) 輕量級(jí)JSON映射類(lèi)庫(kù) [3]
◎進(jìn)入論壇網(wǎng)絡(luò)編程版塊參加討論
|