Json的学习例子

using System;
using LitJson;
using System.Collections;

namespace JSON
{
    ///
    /// 学习JSON的代码,首先引用LitJson外部文件
    ///

    class Program
    {
        static void Main(string[] args)
        {
            json();//测试Json的基本用法
            writeClassleo();//类属性与Json的互相转换
            writeJson();//书写一个Json格式的文本
        }

        static void json()
        {
            string JsonDate = "{'name':'leo','weight':50,'IsMarry':false,'like':['sport','编程','draw',{'wife':55}],'mywife':{'first':'Mary','SheAge':18}}";//用字符串的形式存储一个键值文件
            JsonData AllInfo = JsonMapper.ToObject(JsonDate);//把字符串数据转成json键值队数据,这里面包含多个键值队数据

            string A = JsonMapper.ToJson(AllInfo);//已经全部转换成Jsondate的AllInfo,反过来转换成字符串

            //那么上面两句就是,Json(仅指特定格式的字符串文本)和jsondate的相互转换

            Console.WriteLine(A);



            if (AllInfo["name"].IsString)//通过键值的名字拿到相应的键值队,判断这个JsonDate是不是字符串
            {
                Console.WriteLine("我的名字是 : {0}", (string)AllInfo["name"]);
            }
            JsonData wife = AllInfo["mywife"];//通过键值名字拿到其中一个键值队,这个键值队里面还包含了一个键值队赋值给一个变量
            if (wife["first"].IsString)//判断这个键值中的数值类型是不是字符串的
            {
                Console.WriteLine("我的第一个老婆,\n她的名字是:{0}\n她的年龄是:{1}", (string)wife["first"], (int)wife["SheAge"]);     //输出的时候把相应的数值转成相应的类型输出用这个键值队名称【】写上键名      
            }
            JsonData like = AllInfo["like"];
            if (like.Count > 0)//数组中放的是值,用索引号 拿到每个值
            {
                Console.WriteLine("我的爱好是 : {0}", (string)like[1]);//用索引号指向这个数组型的键值队中的某个值
            }
        }//end json
        static void writeClassleo()//把一个类中的属性写成一个json 键值队的形式,然后读取
        {
            //实例化要读的那个类
            leo my = new leo();
            //my.LEOList.Add("sucess");


            string writeleo = JsonMapper.ToJson(my);//这个是把类里面定义的属性变量转成一个JSON键值队格式的,纯文本,以便于通用
            Console.WriteLine(writeleo);
            JsonData C = JsonMapper.ToObject(writeleo);//这个是把键值队的文本格式转换成一个JSONdate的类型,【成功把文本转换成Jsondate】
            if (C["name"].IsString)
            {
                Console.WriteLine((string)C["name"]);
            }
            leo B = new leo();
            B = JsonMapper.ToObject(writeleo);//这个是把键值队json格式的字符串文本转换成类格式;前提是这个文本的内容必须是和类定义的属性对应;


            Console.WriteLine("一个Json格式的纯文本,转成类对象的变量:" + B.name);//拿到这个值
        }


        //下面的函数,创建一个Json格式的文本
        static void writeJson()//写一个这样的JSON{“leo”:{"leo1":[{"leo2":20]}}}
        {
            JsonWriter CreatJson = new JsonWriter();
            CreatJson.WriteObjectStart();//写上JSON的键值队对象的第一个“{”;
            CreatJson.WritePropertyName("leo");//写上对象的属性名
            CreatJson.WriteObjectStart();
            CreatJson.WritePropertyName("leo1");//写上对象的属性名
            CreatJson.WriteArrayStart();
            CreatJson.WriteObjectStart();
            CreatJson.WritePropertyName("leo2");//写上对象的属性名
            CreatJson.Write(20);
            CreatJson.WriteObjectEnd();
            CreatJson.WriteArrayEnd();
            CreatJson.WriteObjectEnd();
            CreatJson.WriteObjectEnd();//写上JSON的键值队对象的最后一个“}”;
            string A = CreatJson.ToString();//写好这个JSON键值队文本之后,存储在CreatJson中了,我要拿出来,用这个变量Tostring();方法,拿出来存在A中
            JsonData myCreat = JsonMapper.ToObject(A);//把JSON键值队转换成一个JSONDate 类型中去,按照变量【名字】来访问
            JsonData leo = myCreat["leo"];//拿到leo这个对象
            JsonData leo1 = leo["leo1"];
            JsonData leo2 = leo1[0];
            Console.WriteLine("终于拿到你:{0}", (int)leo2["leo2"]);


            Console.WriteLine(A);
            //Console.WriteLine(myCreat[leo]);
        }


    }//end classProgram


    class leo
    {
        public string name = "leo";
        public int age = 26;
        public string WifeName2 = "Mary";
        public int Wifeage2 = 18;
        public ArrayList LEOList = new ArrayList();
        public leo()
        {
            LEOList.Add("Mary3");
            LEOList.Add(18);
            //LEOList.Add(false);
            LEOList.Insert(2, "loveLeo");
        }
    }//一个单独的类,这里面有很多定义好的属性,用于让 JsonMapper.ToJson(my)把把类对象转化成一个JSON的字符串类型的键值队格式的文本。JsonMapper.ToObject(P)则可以把一个JSON的字符串类型的键值队格式的文本,存储到leo类的一个实例中去  
}//End namespace

你可能感兴趣的:(Unity与c#)