【Unity】文件信息的存储和解析(C#代码)

目录

文件存储

两种文件信息解析方法

文件加密处理

文件解密处理

 全部代码


文件存储

一些游戏案例开发过程中的一些数据转换成Json格式,然后存到指定的位置

 //3.将对象转化为Json
 List<Hokag> hokagList = new List<Hokag>()
 {
     new Hokag(){Name="漩涡鸣人",Age=20,Skill="嘴遁"},
     new Hokag(){Name="木叶丸",Age=15,Skill="色诱之术"}
 };
 string json = JsonMapper.ToJson(hokagList);
 json = Regex.Unescape(json);//把Unicode转成中文

 //加密
 DataSecurity dataSecurity = new DataSecurity();



 Debug.Log(json);


 //文件存储
 File.WriteAllText(Application.dataPath + "/Hokalnfor.txt", json, Encoding.UTF8);

两种文件信息解析方法

1.JsonMapper.ToObject去解析json

        //方法1.JsonMapper.ToObject去解析json
        JsonData jsonData = JsonMapper.ToObject(File.ReadAllText(Application.dataPath + "/Hokag.txt"));
        List<Hokag> hokagList = new List<Hokag>();//创建列表,存放信息

        foreach (JsonData item in jsonData)
        {
            Hokag hokag = new Hokag();//创建对象
            //根据键来找到对应的值
            JsonData nameValue = item["Name"];
            JsonData ageValue = item["Age"];
            JsonData skillValue = item["Skill"];

            hokag.Name = nameValue.ToString();
            hokag.Age = Int32.Parse(ageValue.ToString());
            hokag.Skill = skillValue.ToString();
            hokagList.Add(hokag);//添加至列表
        }

        foreach (Hokag item in hokagList)
        {
            Debug.Log(item);
        }

2.使用泛型来解析Json

        //方法2.使用泛型来解析Json
        //JSON里面对象的键必须要和定义的类里面的属性或者字段一致
        Hokag[] hokagArray = JsonMapper.ToObject<Hokag[]>(File.ReadAllText(Application.dataPath + "/Hokag.txt"));
        foreach (Hokag item in hokagArray)
        {
            Debug.Log(item);
        }

文件信息的存储和解析在同一个C#文件 JsonText.cs中,需要挂载在空物体上。

需要用到的头文件:

using UnityEngine;
using System.Runtime.Serialization.Json;
using System.Collections.Generic;
using System.Text.RegularExpressions;//转码引用命名空间把Unicode转成中文
using System.IO;//输入输出流
using LitJson;
using System;
using System.Text;

效果:

文件加密处理

新开C#文件DataSecrity.cs

    //加密密钥
    string key = "12345678123456781234567812345678";



    /// <summary>
    /// 字符串加密
    /// </summary>
    /// <param name="toE">要加密的字符串</param>
    /// <returns></returns>
    public string Encript(string toE)
    {


        //将密钥转换为byte数组
        byte[] keyArray = UTF8Encoding.UTF8.GetBytes(key);

        //创建 RijindaelManaged对象
        RijndaelManaged rDel = new RijndaelManaged();
        //设置相关参数
        rDel.Key = keyArray;//密钥
        rDel.Mode = CipherMode.ECB;//块码模式
        rDel.Padding = PaddingMode.PKCS7;//填充模式
        //创建加密器对象
        ICryptoTransform cTransform = rDel.CreateDecryptor();
        //将要加密的明文字符串转换为byte数组
        byte[] toEncriptArray = UTF8Encoding.UTF8.GetBytes(toE);
        //加密  得到密文byte数组
        byte[] resultArray = cTransform.TransformFinalBlock(toEncriptArray, 0, toEncriptArray.Length);

        //返回密文字符串
        return Convert.ToBase64String(resultArray, 0, resultArray.Length);

    }


文件解密处理

    /// <summary>
    /// 字符串解密
    /// </summary>
    /// <param name="toD">要解密的字符串</param>
    /// <returns></returns>
    public string Decript(string toD)
    {
        //将密钥转化为byte数组
        byte[] keyArray = UTF8Encoding.UTF8.GetBytes(key);
        //创建 RijindaelManaged对象
        RijndaelManaged rDel = new RijndaelManaged();
        //设置相关参数
        rDel.Key = keyArray;//密钥
        rDel.Mode = CipherMode.ECB;//块码模式
        rDel.Padding = PaddingMode.PKCS7;//填充模式

        //创建解密器对象
        ICryptoTransform cTransform = rDel.CreateDecryptor();
        //将密文字符串转换位byte数组
        byte[] toDecriptArray = Convert.FromBase64String(toD);
        //解密,得到明文byte数组
        byte[] resultArray = cTransform.TransformFinalBlock(toDecriptArray, 0, toDecriptArray.Length);
        //返回明文字符串
        return UTF8Encoding.UTF8.GetString(resultArray);

    } 

 全部代码

JsonTest.cs

using UnityEngine;
using System.Runtime.Serialization.Json;
using System.Collections.Generic;
using System.Text.RegularExpressions;//转码引用命名空间把Unicode转成中文
using System.IO;//输入输出流
using LitJson;
using System;
using System.Text;

public class JsonTest : MonoBehaviour
{
   

    void Start()
    {
        方法1.JsonMapper.ToObject去解析json
        //JsonData jsonData = JsonMapper.ToObject(File.ReadAllText(Application.dataPath + "/Hokag.txt"));
        //List<Hokag> hokagList = new List<Hokag>();//创建列表,存放信息

        //foreach (JsonData item in jsonData)
        //{
        //    Hokag hokag = new Hokag();//创建对象
        //    //根据键来找到对应的值
        //    JsonData nameValue = item["Name"];
        //    JsonData ageValue = item["Age"];
        //    JsonData skillValue = item["Skill"];

        //    hokag.Name = nameValue.ToString();
        //    hokag.Age = Int32.Parse(ageValue.ToString());
        //    hokag.Skill = skillValue.ToString();
        //    hokagList.Add(hokag);//添加至列表
        //}

        //foreach (Hokag item in hokagList)
        //{
        //    Debug.Log(item);
        //}




        方法2.使用泛型来解析Json
        JSON里面对象的键必须要和定义的类里面的属性或者字段一致
        //Hokag[] hokagArray = JsonMapper.ToObject<Hokag[]>(File.ReadAllText(Application.dataPath + "/Hokag.txt"));
        //foreach (Hokag item in hokagArray)
        //{
        //    Debug.Log(item);
        //}



        //3.将对象转化为Json
        List<Hokag> hokagList = new List<Hokag>()
        {
            new Hokag(){Name="漩涡鸣人",Age=20,Skill="嘴遁"},
            new Hokag(){Name="木叶丸",Age=15,Skill="色诱之术"}
        };
        string json = JsonMapper.ToJson(hokagList);
        json = Regex.Unescape(json);//把Unicode转成中文

        //打印前加密处理
        DataSecurity dataSecurity = new DataSecurity();
        json = dataSecurity.Encript(json);//字符串加密


        json = dataSecurity.Decript(json);//字符串解密



        Debug.Log(json);

        //文件存储
        File.WriteAllText(Application.dataPath + "/Hokalnfor.txt", json, Encoding.UTF8);



    }
}

DataSecurity.cs

using System.Collections;
using System.Collections.Generic;
using System.Security.Cryptography;//密码学命名空间
using System.Text;
using System;

public class DataSecurity
{
    //加密密钥
    string key = "12345678123456781234567812345678";



    /// <summary>
    /// 字符串加密
    /// </summary>
    /// <param name="toE">要加密的字符串</param>
    /// <returns></returns>
    public string Encript(string toE)
    {


        //将密钥转换为byte数组
        byte[] keyArray = UTF8Encoding.UTF8.GetBytes(key);

        //创建 RijindaelManaged对象
        RijndaelManaged rDel = new RijndaelManaged();
        //设置相关参数
        rDel.Key = keyArray;//密钥
        rDel.Mode = CipherMode.ECB;//块码模式
        rDel.Padding = PaddingMode.PKCS7;//填充模式
        //创建加密器对象
        ICryptoTransform cTransform = rDel.CreateDecryptor();
        //将要加密的明文字符串转换为byte数组
        byte[] toEncriptArray = UTF8Encoding.UTF8.GetBytes(toE);
        //加密  得到密文byte数组
        byte[] resultArray = cTransform.TransformFinalBlock(toEncriptArray, 0, toEncriptArray.Length);

        //返回密文字符串
        return Convert.ToBase64String(resultArray, 0, resultArray.Length);

    }

    /// <summary>
    /// 字符串解密
    /// </summary>
    /// <param name="toD">要解密的字符串</param>
    /// <returns></returns>
    public string Decript(string toD)
    {
        //将密钥转化为byte数组
        byte[] keyArray = UTF8Encoding.UTF8.GetBytes(key);
        //创建 RijindaelManaged对象
        RijndaelManaged rDel = new RijndaelManaged();
        //设置相关参数
        rDel.Key = keyArray;//密钥
        rDel.Mode = CipherMode.ECB;//块码模式
        rDel.Padding = PaddingMode.PKCS7;//填充模式

        //创建解密器对象
        ICryptoTransform cTransform = rDel.CreateDecryptor();
        //将密文字符串转换位byte数组
        byte[] toDecriptArray = Convert.FromBase64String(toD);
        //解密,得到明文byte数组
        byte[] resultArray = cTransform.TransformFinalBlock(toDecriptArray, 0, toDecriptArray.Length);
        //返回明文字符串
        return UTF8Encoding.UTF8.GetString(resultArray);

    } 

}

猜你喜欢

转载自blog.csdn.net/m0_64476561/article/details/134427201
今日推荐