JSON是一個簡單的,但功能強大的序列化資料格式。它定義了簡單的類型,如布爾,數(int和float)和字元串,和幾個資料結構:list和dictionnary。可以在http://JSON.org了解關于JSON的更多資訊。
litjson是用C #編寫的,它的目的是要小,快速,易用。它使用了Mono架構。
作者:王選易,出處:http://www.cnblogs.com/neverdie/ 歡迎轉載,也請保留這段聲明。如果你喜歡這篇文章,請點【推薦】。謝謝!

介紹
安裝LitJSON
将LitJSON編譯好的dll檔案通過Import New Asset的方式導入到項目中,再使用Using LitJSON即可使用JSONMapper類中的簡便方法。dll的下載下傳位址在這裡.
将JSON轉化為Object并可逆向轉化
為了在.Net程式中使用JSON格式的資料。一個自然的方法是使用JSON文本生成一個特定的類的一個新執行個體;為了比對類的格式,一般存儲的JSON字元串是一個字典。
另一方面,為了将對象序列化為JSON字元串,一個簡單的導出操作,聽起來是個好主意。
為了這個目的,LitJSON包引入了JsonMapper類,它提供了兩個用于做到 JSON轉化為object 和 object轉化為JSON 的主要方法。這兩個方法是jsonmapper.toobject和jsonmapper.tojson。
将object轉化為字元串之後,我們就可以将這個字元串很友善地在檔案中讀取和寫入了。
一個簡單的JsonMapper的例子
在下面的例子中,ToObject方法有一個泛型參數,來指定傳回的某種特定的資料類型:即JsonMapper.ToObject<T>。
using LitJson;
using System;
public class Person
{
// C# 3.0 auto-implemented properties
public string Name { get; set; }
public int Age { get; set; }
public DateTime Birthday { get; set; }
}
public class JsonSample
{
public static void Main()
{
PersonToJson();
JsonToPerson();
}
public static void PersonToJson()
{
Person bill = new Person();
bill.Name = "William Shakespeare";
bill.Age = 51;
bill.Birthday = new DateTime(1564, 4, 26);
string json_bill = JsonMapper.ToJson(bill);
Console.WriteLine(json_bill);
}
public static void JsonToPerson()
{
string json = @"
{
""Name"" : ""Thomas More"",
""Age"" : 57,
""Birthday"" : ""02/07/1478 00:00:00""
}";
Person thomas = JsonMapper.ToObject<Person>(json);
Console.WriteLine("Thomas' age: {0}", thomas.Age);
}
}
上文的輸出:
{"Name":"William Shakespeare","Age":51,"Birthday":"04/26/1564 00:00:00"}
Thomas' age: 57
使用非泛型的JsonMapper.ToObject
當不存在特定的JSON資料類時,它将傳回一個JSONData執行個體。JSONData是一種通用型可以儲存任何資料類型支援JSON,包括list和dictionary。
using LitJson;
using System;
public class JsonSample
{
public static void Main()
{
string json = @"
{
""album"" : {
""name"" : ""The Dark Side of the Moon"",
""artist"" : ""Pink Floyd"",
""year"" : 1973,
""tracks"" : [
""Speak To Me"",
""Breathe"",
""On The Run""
]
}
}
";
LoadAlbumData(json);
}
public static void LoadAlbumData(string json_text)
{
Console.WriteLine("Reading data from the following JSON string: {0}",
json_text);
JsonData data = JsonMapper.ToObject(json_text);
// Dictionaries are accessed like a hash-table
Console.WriteLine("Album's name: {0}", data["album"]["name"]);
// Scalar elements stored in a JsonData instance can be cast to
// their natural types
string artist = (string) data["album"]["artist"];
int year = (int) data["album"]["year"];
Console.WriteLine("Recorded by {0} in {1}", artist, year);
// Arrays are accessed like regular lists as well
Console.WriteLine("First track: {0}", data["album"]["tracks"][0]);
}
}
上面例子的輸出:
Reading data from the following JSON string:
{
"album" : {
"name" : "The Dark Side of the Moon",
"artist" : "Pink Floyd",
"year" : 1973,
"tracks" : [
"Speak To Me",
"Breathe",
"On The Run"
]
}
}
Album's name: The Dark Side of the Moon
Recorded by Pink Floyd in 1973
First track: Speak To Me
Reader和Writer
一些人喜歡使用stream的方式處理JSON資料,對于他們, 我們提供的接口是jsonreader和jsonwriter。
JSONMapper實際上是建立在以上兩個類的基礎上的,是以你可以把這兩個類當成是litJSON的底層接口。
使用JsonReader
using LitJson;
using System;
public class DataReader
{
public static void Main()
{
string sample = @"{
""name"" : ""Bill"",
""age"" : 32,
""awake"" : true,
""n"" : 1994.0226,
""note"" : [ ""life"", ""is"", ""but"", ""a"", ""dream"" ]
}";
PrintJson(sample);
}
public static void PrintJson(string json)
{
JsonReader reader = new JsonReader(json);
Console.WriteLine ("{0,14} {1,10} {2,16}", "Token", "Value", "Type");
Console.WriteLine (new String ('-', 42));
// The Read() method returns false when there's nothing else to read
while (reader.Read()) {
string type = reader.Value != null ?
reader.Value.GetType().ToString() : "";
Console.WriteLine("{0,14} {1,10} {2,16}",
reader.Token, reader.Value, type);
}
}
}
輸出如下:
Token Value Type
------------------------------------------
ObjectStart
PropertyName name System.String
String Bill System.String
PropertyName age System.String
Int 32 System.Int32
PropertyName awake System.String
Boolean True System.Boolean
PropertyName n System.String
Double 1994.0226 System.Double
PropertyName note System.String
ArrayStart
String life System.String
String is System.String
String but System.String
String a System.String
String dream System.String
ArrayEnd
ObjectEnd
系列文章
Unity3D基礎教程
作者:王選易
出處:http://www.cnblogs.com/neverdie/
如果您覺得有些收獲,請點選頁面下方的【推薦】或者關注【我的微網誌】
如果您想進一步交流,請郵件聯系我活在微網誌上給我私信