首页 > 代码库 > Unity 学习Json篇

Unity 学习Json篇

 

介绍

JSON是一个简单的,但功能强大的序列化数据格式。它定义了简单的类型,如布尔,数(int和float)和字符串,和几个数据结构:list和dictionnary。可以在http://JSON.org了解关于JSON的更多信息。

litjson是用C #编写的,它的目的是要小,快速,易用。它使用了Mono框架。

安装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>。

 1 using LitJson;   2 using System;   3    4 public class Person   5 {   6     // C# 3.0 auto-implemented properties   7     public string   Name     { get; set; }   8     public int      Age      { get; set; }   9     public DateTime Birthday { get; set; }  10 }  11   12 public class JsonSample  13 {  14     public static void Main()  15     {  16         PersonToJson();  17         JsonToPerson();  18     }  19   20     public static void PersonToJson()  21     {  22         Person bill = new Person();  23   24         bill.Name = "William Shakespeare";  25         bill.Age  = 51;  26         bill.Birthday = new DateTime(1564, 4, 26);  27   28         string json_bill = JsonMapper.ToJson(bill);  29   30         Console.WriteLine(json_bill);  31     }  32   33     public static void JsonToPerson()  34     {  35         string json = @"  36             {  37                 ""Name""     : ""Thomas More"",  38                 ""Age""      : 57,  39                 ""Birthday"" : ""02/07/1478 00:00:00""  40             }";  41   42         Person thomas = JsonMapper.ToObject<Person>(json);  43   44         Console.WriteLine("Thomas‘ age: {0}", thomas.Age);  45     }  46 }  

上文的输出:

1 {"Name":"William Shakespeare","Age":51,"Birthday":"04/26/1564 00:00:00"}  2 Thomas age: 57  

使用非泛型的JsonMapper.ToObject

 

当不存在特定的JSON数据类时,它将返回一个JSONData实例。JSONData是一种通用型可以保存任何数据类型支持JSON,包括list和dictionary。

 1 using LitJson;   2 using System;   3    4 public class JsonSample   5 {   6     public static void Main()   7     {   8         string json = @"   9           {  10             ""album"" : {  11               ""name""   : ""The Dark Side of the Moon"",  12               ""artist"" : ""Pink Floyd"",  13               ""year""   : 1973,  14               ""tracks"" : [  15                 ""Speak To Me"",  16                 ""Breathe"",  17                 ""On The Run""  18               ]  19             }  20           }  21         ";  22   23         LoadAlbumData(json);  24     }  25   26     public static void LoadAlbumData(string json_text)  27     {  28         Console.WriteLine("Reading data from the following JSON string: {0}",  29                           json_text);  30   31         JsonData data =http://www.mamicode.com/ JsonMapper.ToObject(json_text);  32   33         // Dictionaries are accessed like a hash-table  34         Console.WriteLine("Album‘s name: {0}", data["album"]["name"]);  35   36         // Scalar elements stored in a JsonData instance can be cast to  37         // their natural types  38         string artist = (string) data["album"]["artist"];  39         int    year   = (int) data["album"]["year"];  40   41         Console.WriteLine("Recorded by {0} in {1}", artist, year);  42   43         // Arrays are accessed like regular lists as well  44         Console.WriteLine("First track: {0}", data["album"]["tracks"][0]);  45     }  46 }  

上面例子的输出:

 1 Reading data from the following JSON string:   2           {   3             "album" : {   4               "name"   : "The Dark Side of the Moon",   5               "artist" : "Pink Floyd",   6               "year"   : 1973,   7               "tracks" : [   8                 "Speak To Me",   9                 "Breathe",  10                 "On The Run"  11               ]  12             }  13           }  14   15 Albums name: The Dark Side of the Moon  16 Recorded by Pink Floyd in 1973  17 First track: Speak To Me  

Reader和Writer

 

一些人喜欢使用stream的方式处理JSON数据,对于他们, 我们提供的接口是jsonreader和jsonwriter。

JSONMapper实际上是建立在以上两个类的基础上的,所以你可以把这两个类当成是litJSON的底层接口。

使用JsonReader

 1 using LitJson;   2 using System;   3    4 public class DataReader   5 {   6     public static void Main()   7     {   8         string sample = @"{   9             ""name""  : ""Bill"",  10             ""age""   : 32,  11             ""awake"" : true,  12             ""n""     : 1994.0226,  13             ""note""  : [ ""life"", ""is"", ""but"", ""a"", ""dream"" ]  14           }";  15   16         PrintJson(sample);  17     }  18   19     public static void PrintJson(string json)  20     {  21         JsonReader reader = new JsonReader(json);  22   23         Console.WriteLine ("{0,14} {1,10} {2,16}", "Token", "Value", "Type");  24         Console.WriteLine (new String (-, 42));  25   26         // The Read() method returns false when there‘s nothing else to read  27         while (reader.Read()) {  28             string type = reader.Value != null ?  29                 reader.Value.GetType().ToString() : "";  30   31             Console.WriteLine("{0,14} {1,10} {2,16}",  32                               reader.Token, reader.Value, type);  33         }  34     }  35 }  

输出如下:

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


出处:http://www.cnblogs.com/neverdie/ 欢迎转载,也请保留这段声明

Unity 学习Json篇