数据持久化Json相关

1、Json文件编辑软件

所有可打开文档的软件都能打开json,常用的有:记事本、Subline Text,网上json编辑器

2、Json语法规则

json的结构是一种键值对形式。

语法规则如下:

//json的注释规则和C#很像,是用//来注释
对象
{ }
数组
[]
键值对对应关系
:
数据分割
,
键名/字符串
""
键值对的表示:
"键名":值内容
值类型有:
数字(整型或者浮点型)、字符串、布尔类型、数组、null、对象

以下示例来理解:

{
    "name":"张三",
    "age":100
    "sex":true,
    "ids":[1,2,3,4]
    "people":[
            {"name":"","age":18,"sex":false},
            {"name":"","age":19,"sex":true}
    ],
    "son":null
}

   在C#对应的属性为

public class Attribt
{
    public string name;
    public int age;
    public bool sex;
    public List<int> ids;
    public List<Person> people;
    public Person son;
}
public class Person
{
    public string name;
    public int age;
    public bool sex;
}

3、JsonUtlity 

JsonUtlity属于Unity中自带的解析json的公共类

1、在文件中存储字符串

File.WriteAllText(Application.persistentDataPath+"/Test.json","存储的测试文件");

第一个参数是存储的路径,第二个是存储的字符串,

第一个存储路径必须存在,否则会报错

2、读取文件中所有字符串

File.ReadAllText(Application.persistentDataPath+"/Test.json"); 

3、使用jsonutlity进行序列化

方法:JsonUtlity.ToJson(对象);

将对象转换成字符串,再结合前面的写入方法,从而创建出一个json文档。

值得注意的是:

float序列化时会有一定的误差;

自定义类型需要加上序列化特征[System.Serializable];

想要序列化私有变量,需要加上特征[SerializeField];

JsonUtlity不支持字典格式。

JsonUtlity储存null对象不会是null,而是默认值的数据

4、jsonUtlity的反序列化

方法:JsonUtlity.FromJson(string)

String JsonStr=File.ReadAllText(Application.persistentDataPath+"/Test.json");

//然后转换成类对象,有两个写法

Person p=JsonUtllity.FromJson(JsonStr,typeof(Person)) as Person;

Person p=JsonUtlity.FromJson<Person>(JsonStr);

JsonUtlity无法直接读取数据集合,但可以将数据集合在json文件里用某个对象进行包裹这些数据集合,然后再在外部进行反序列化即可。 

其次,文本的编码形式得是UTF-8,不然无法加载。

 4、LitJson

LitJson是由C#编写,属于一个第三方库,主要用于处理json的序列化和反序列化

和JsonUtlity类似,文本编码形式需是UTF-8,不然无法加载。不同的是LitJson可以直接读取数据集合,不需要对数据集合进行包裹封装。

1、获取Litjson

前往官网找到如下图所示

 

点进去后点击source如图所示

前面的文件和API,可以查看一些教程和规则,通过此法可自行查找。 

点击source会跳转到github,然后自行下载解压就好。

然后解压后找到里面src文件,将这个部分拖进工程当中即可。

2、LitJson的序列化

方法:JsonMapper.ToJson(对象);

 相对于JsonUtlity,不需要加特性,支持字典类型,需要引用LitJson命名空间,但还是不能序列化私有变量。

3、LitJson反序列化

方法:JsonMapper.ToObject<TYPE>(string)

LitJson虽然支持字典的序列化相关,但是键如果是数值时可能会有一些问题,最好用字符串类型

其次,反序列化时自定义类型需要无参构造函数,否则反序列化时会报错。

  • 15
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值