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


    目录

    文件存储

    两种文件信息解析方法

    文件加密处理

    文件解密处理

     全部代码


    文件存储

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

    1. //3.将对象转化为Json
    2. List hokagList = new List()
    3. {
    4. new Hokag(){Name="漩涡鸣人",Age=20,Skill="嘴遁"},
    5. new Hokag(){Name="木叶丸",Age=15,Skill="色诱之术"}
    6. };
    7. string json = JsonMapper.ToJson(hokagList);
    8. json = Regex.Unescape(json);//把Unicode转成中文
    9. //加密
    10. DataSecurity dataSecurity = new DataSecurity();
    11. Debug.Log(json);
    12. //文件存储
    13. File.WriteAllText(Application.dataPath + "/Hokalnfor.txt", json, Encoding.UTF8);

    两种文件信息解析方法

    1.JsonMapper.ToObject去解析json

    1. //方法1.JsonMapper.ToObject去解析json
    2. JsonData jsonData = JsonMapper.ToObject(File.ReadAllText(Application.dataPath + "/Hokag.txt"));
    3. List hokagList = new List();//创建列表,存放信息
    4. foreach (JsonData item in jsonData)
    5. {
    6. Hokag hokag = new Hokag();//创建对象
    7. //根据键来找到对应的值
    8. JsonData nameValue = item["Name"];
    9. JsonData ageValue = item["Age"];
    10. JsonData skillValue = item["Skill"];
    11. hokag.Name = nameValue.ToString();
    12. hokag.Age = Int32.Parse(ageValue.ToString());
    13. hokag.Skill = skillValue.ToString();
    14. hokagList.Add(hokag);//添加至列表
    15. }
    16. foreach (Hokag item in hokagList)
    17. {
    18. Debug.Log(item);
    19. }

    2.使用泛型来解析Json

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

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

    需要用到的头文件:

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

    效果:

    文件加密处理

    新开C#文件DataSecrity.cs

    1. //加密密钥
    2. string key = "12345678123456781234567812345678";
    3. ///
    4. /// 字符串加密
    5. ///
    6. /// 要加密的字符串
    7. ///
    8. public string Encript(string toE)
    9. {
    10. //将密钥转换为byte数组
    11. byte[] keyArray = UTF8Encoding.UTF8.GetBytes(key);
    12. //创建 RijindaelManaged对象
    13. RijndaelManaged rDel = new RijndaelManaged();
    14. //设置相关参数
    15. rDel.Key = keyArray;//密钥
    16. rDel.Mode = CipherMode.ECB;//块码模式
    17. rDel.Padding = PaddingMode.PKCS7;//填充模式
    18. //创建加密器对象
    19. ICryptoTransform cTransform = rDel.CreateDecryptor();
    20. //将要加密的明文字符串转换为byte数组
    21. byte[] toEncriptArray = UTF8Encoding.UTF8.GetBytes(toE);
    22. //加密 得到密文byte数组
    23. byte[] resultArray = cTransform.TransformFinalBlock(toEncriptArray, 0, toEncriptArray.Length);
    24. //返回密文字符串
    25. return Convert.ToBase64String(resultArray, 0, resultArray.Length);
    26. }

    文件解密处理

    1. ///
    2. /// 字符串解密
    3. ///
    4. /// 要解密的字符串
    5. ///
    6. public string Decript(string toD)
    7. {
    8. //将密钥转化为byte数组
    9. byte[] keyArray = UTF8Encoding.UTF8.GetBytes(key);
    10. //创建 RijindaelManaged对象
    11. RijndaelManaged rDel = new RijndaelManaged();
    12. //设置相关参数
    13. rDel.Key = keyArray;//密钥
    14. rDel.Mode = CipherMode.ECB;//块码模式
    15. rDel.Padding = PaddingMode.PKCS7;//填充模式
    16. //创建解密器对象
    17. ICryptoTransform cTransform = rDel.CreateDecryptor();
    18. //将密文字符串转换位byte数组
    19. byte[] toDecriptArray = Convert.FromBase64String(toD);
    20. //解密,得到明文byte数组
    21. byte[] resultArray = cTransform.TransformFinalBlock(toDecriptArray, 0, toDecriptArray.Length);
    22. //返回明文字符串
    23. return UTF8Encoding.UTF8.GetString(resultArray);
    24. }

     全部代码

    JsonTest.cs

    1. using UnityEngine;
    2. using System.Runtime.Serialization.Json;
    3. using System.Collections.Generic;
    4. using System.Text.RegularExpressions;//转码引用命名空间把Unicode转成中文
    5. using System.IO;//输入输出流
    6. using LitJson;
    7. using System;
    8. using System.Text;
    9. public class JsonTest : MonoBehaviour
    10. {
    11. void Start()
    12. {
    13. 方法1.JsonMapper.ToObject去解析json
    14. //JsonData jsonData = JsonMapper.ToObject(File.ReadAllText(Application.dataPath + "/Hokag.txt"));
    15. //List hokagList = new List();//创建列表,存放信息
    16. //foreach (JsonData item in jsonData)
    17. //{
    18. // Hokag hokag = new Hokag();//创建对象
    19. // //根据键来找到对应的值
    20. // JsonData nameValue = item["Name"];
    21. // JsonData ageValue = item["Age"];
    22. // JsonData skillValue = item["Skill"];
    23. // hokag.Name = nameValue.ToString();
    24. // hokag.Age = Int32.Parse(ageValue.ToString());
    25. // hokag.Skill = skillValue.ToString();
    26. // hokagList.Add(hokag);//添加至列表
    27. //}
    28. //foreach (Hokag item in hokagList)
    29. //{
    30. // Debug.Log(item);
    31. //}
    32. 方法2.使用泛型来解析Json
    33. JSON里面对象的键必须要和定义的类里面的属性或者字段一致
    34. //Hokag[] hokagArray = JsonMapper.ToObject(File.ReadAllText(Application.dataPath + "/Hokag.txt"));
    35. //foreach (Hokag item in hokagArray)
    36. //{
    37. // Debug.Log(item);
    38. //}
    39. //3.将对象转化为Json
    40. List hokagList = new List()
    41. {
    42. new Hokag(){Name="漩涡鸣人",Age=20,Skill="嘴遁"},
    43. new Hokag(){Name="木叶丸",Age=15,Skill="色诱之术"}
    44. };
    45. string json = JsonMapper.ToJson(hokagList);
    46. json = Regex.Unescape(json);//把Unicode转成中文
    47. //打印前加密处理
    48. DataSecurity dataSecurity = new DataSecurity();
    49. json = dataSecurity.Encript(json);//字符串加密
    50. json = dataSecurity.Decript(json);//字符串解密
    51. Debug.Log(json);
    52. //文件存储
    53. File.WriteAllText(Application.dataPath + "/Hokalnfor.txt", json, Encoding.UTF8);
    54. }
    55. }

    DataSecurity.cs

    1. using System.Collections;
    2. using System.Collections.Generic;
    3. using System.Security.Cryptography;//密码学命名空间
    4. using System.Text;
    5. using System;
    6. public class DataSecurity
    7. {
    8. //加密密钥
    9. string key = "12345678123456781234567812345678";
    10. ///
    11. /// 字符串加密
    12. ///
    13. /// 要加密的字符串
    14. ///
    15. public string Encript(string toE)
    16. {
    17. //将密钥转换为byte数组
    18. byte[] keyArray = UTF8Encoding.UTF8.GetBytes(key);
    19. //创建 RijindaelManaged对象
    20. RijndaelManaged rDel = new RijndaelManaged();
    21. //设置相关参数
    22. rDel.Key = keyArray;//密钥
    23. rDel.Mode = CipherMode.ECB;//块码模式
    24. rDel.Padding = PaddingMode.PKCS7;//填充模式
    25. //创建加密器对象
    26. ICryptoTransform cTransform = rDel.CreateDecryptor();
    27. //将要加密的明文字符串转换为byte数组
    28. byte[] toEncriptArray = UTF8Encoding.UTF8.GetBytes(toE);
    29. //加密 得到密文byte数组
    30. byte[] resultArray = cTransform.TransformFinalBlock(toEncriptArray, 0, toEncriptArray.Length);
    31. //返回密文字符串
    32. return Convert.ToBase64String(resultArray, 0, resultArray.Length);
    33. }
    34. ///
    35. /// 字符串解密
    36. ///
    37. /// 要解密的字符串
    38. ///
    39. public string Decript(string toD)
    40. {
    41. //将密钥转化为byte数组
    42. byte[] keyArray = UTF8Encoding.UTF8.GetBytes(key);
    43. //创建 RijindaelManaged对象
    44. RijndaelManaged rDel = new RijndaelManaged();
    45. //设置相关参数
    46. rDel.Key = keyArray;//密钥
    47. rDel.Mode = CipherMode.ECB;//块码模式
    48. rDel.Padding = PaddingMode.PKCS7;//填充模式
    49. //创建解密器对象
    50. ICryptoTransform cTransform = rDel.CreateDecryptor();
    51. //将密文字符串转换位byte数组
    52. byte[] toDecriptArray = Convert.FromBase64String(toD);
    53. //解密,得到明文byte数组
    54. byte[] resultArray = cTransform.TransformFinalBlock(toDecriptArray, 0, toDecriptArray.Length);
    55. //返回明文字符串
    56. return UTF8Encoding.UTF8.GetString(resultArray);
    57. }
    58. }

  • 相关阅读:
    【腾讯技术工程】2022年精选文章后端篇
    RocketMQ源码(十八)之消费者PullMessageService
    ray tracing of Embree
    测试开发面试题
    Linux 进程控制
    《菜狗商城》Springboot+Vue电商项目
    锂电池为什么做保护
    【pytorch】torch.gather()函数
    redis分布式锁,setnx+lua脚本的java实现
    投资 - 股市顺势加仓方式
  • 原文地址:https://blog.csdn.net/m0_64476561/article/details/134427201