zoukankan      html  css  js  c++  java
  • 【Unity3D插件】在Unity中读写文件数据:LitJSON快速教程

    作者:王选易,出处:http://www.cnblogs.com/neverdie/ 欢迎转载,也请保留这段声明。如果你喜欢这篇文章,请点【推荐】。谢谢!

    QQ图片20140529123319

    介绍

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

    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
  • 相关阅读:
    Deployment of VC2008 apps without installing anything
    用MT.exe将exe中的manifest文件提取出来和将manifest文件放入exe中
    Golang快速入门
    8个优质的编程学习网站
    免费学编程!10个全球顶尖的编程在线自学网站
    7个在线学习C++编程的最佳途径
    为什么多数游戏服务端是用 C++ 来写
    学习游戏服务器开发必看,C++游戏服务器开发常用工具介绍
    Ambari——大数据平台的搭建利器(一)
    Python爬虫项目整理
  • 原文地址:https://www.cnblogs.com/neverdie/p/3777992.html
Copyright © 2011-2022 走看看