zoukankan      html  css  js  c++  java
  • 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 = 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 Album's 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/ 欢迎转载,也请保留这段声明

  • 相关阅读:
    SQL Server 阻止了对组件 'Ole Automation Procedures' 的 过程'sys.sp_OACreate' 的访问
    谷歌浏览器扩展程序manifest.json参数详解
    获取天气api
    UVA 10385 Duathlon
    UVA 10668 Expanding Rods
    UVALIVE 3891 The Teacher's Side of Math
    UVA 11149 Power of Matrix
    UVA 10655 Contemplation! Algebra
    UVA 11210 Chinese Mahjong
    UVA 11384 Help is needed for Dexter
  • 原文地址:https://www.cnblogs.com/AdvancePikachu/p/6515891.html
Copyright © 2011-2022 走看看