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