• Unity数据类型转XML/Json-封装函数直接调用(Chinar)


    Unity将数据直接转XML/Json文件


    本文提供全流程,中文翻译。

    Chinar 坚持将简单的生活方式,带给世人!

    (拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例)


    Chinar —— 心分享、心创新!

    助力在 Unity 中将数据直接存为 Json/XML 文件

    为新手节省宝贵的时间,避免采坑!



    全文高清图片,点击即可放大观看 (很多人竟然不知道)


    1

    Script —— 脚本


    由于很多新手对于数据持久化,存为xml与Json不熟悉,在使用时,过程觉得比较复杂

    .这里 Chinar 对过程进行了简化、封装为函数,直接调用即可

    读取非常方便,只需要一个函数就能完成 数据—文件,文件—数据的转换!!

    创建一个新脚本,复制以下脚本到其中

    调用 Chinar.CreateXml (要保存到的路径+文件名,数据对象)
    即可直接将数据保存为 XML 文件

    相同方式调用 ToJson 传相应参数即可

    注意:
    需要转 Json 文件时,需要引用 LItJson

    点击下载 —— LItJson (积分支持)

    点击下载 —— LItJson (Chinar免费)

    将下载后的 LItJson.dll 文件,放到 Asset 下的 Plugins 目录中

    没有 Plugins 文件夹,就新建一个
    举个栗子黑白88

    using System;
    using System.IO;
    using System.Security.Cryptography;
    using System.Text;
    using System.Xml;
    using System.Xml.Serialization;
    using LitJson;
    
    
    namespace Cnr
    {
        /// <summary>
        /// 存放所有公用函数 —— 静态类,用于简化逻辑、代码
        /// </summary>
        public sealed class Chinar
        {
            /// <summary>
            /// Data →→→→→→ Json
            /// </summary>
            /// <typeparam name="T">可传入泛型</typeparam>
            /// <param name="path">保存文件的路径(包含文件名+后缀)</param>
            /// <param name="t">数据对象</param>
            public static void ToJson<T>(string path, T t)
            {
                StreamWriter streamWriter = new FileInfo(path).CreateText();
                streamWriter.WriteLine(JsonMapper.ToJson(t));
                streamWriter.Close();
                streamWriter.Dispose();
            }
    
    
            /// <summary>
            /// Json →→→→→→ Data
            /// </summary>
            /// <typeparam name="T">泛型--数据类型</typeparam>
            /// <param name="path">文件的路径(包含文件名+后缀)</param>
            /// <returns></returns>
            public static T ToObject<T>(string path)
            {
                StreamReader streamReader = new FileInfo(path).OpenText();
                T            t            = JsonMapper.ToObject<T>(streamReader.ReadToEnd());
                streamReader.Close();
                streamReader.Dispose();
                return t;
            }
    
    
            /// <summary>
            /// 创建XML文件 ——(不加密)
            /// </summary>
            /// <param name="fileName">路径</param>
            /// <param name="t">类型</param>
            public static void CreateXml<T>(string fileName, T t)
            {
                StreamWriter writer = File.CreateText(fileName); //创建写入流对象
                //序列化数据,将类型转为数据流
                MemoryStream  memoryStream  = new MemoryStream();
                XmlSerializer xs            = new XmlSerializer(typeof(T));
                XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8);
                xs.Serialize(xmlTextWriter, t);
                memoryStream          = (MemoryStream) xmlTextWriter.BaseStream;
                UTF8Encoding encoding = new UTF8Encoding();
                writer.Write(encoding.GetString(memoryStream.ToArray()));
                writer.Close();
            }
    
    
            /// <summary>
            /// 读取Xml文件 ——(加密)
            /// </summary>
            /// <param name="path">qm文件路径</param>
            /// <returns>GameData类型对象</returns>
            public static T LoadXml<T>(string path)
            {
                StreamReader sReader    = File.OpenText(path);
                string       dataString = sReader.ReadToEnd();
                sReader.Close();
                RijndaelManaged rDel = new RijndaelManaged //解密xml中的数据
                {
                    Key     = Encoding.UTF8.GetBytes("12348578902223367877723456789886"), //加密和解密采用相同的key,具体值自己填,但是必须为32位// 
                    Mode    = CipherMode.ECB,
                    Padding = PaddingMode.PKCS7
                };
                XmlSerializer xs       = new XmlSerializer(typeof(T)); //反序列化
                UTF8Encoding  encoding = new UTF8Encoding();
                //解密xml数据,并反序列化,返回对应数据类型
                MemoryStream memoryStream = new MemoryStream(encoding.GetBytes(Encoding.UTF8.GetString(rDel.CreateDecryptor().TransformFinalBlock(Convert.FromBase64String(dataString), 0, Convert.FromBase64String(dataString).Length)))); //字符串转字节组
                return (T) xs.Deserialize(memoryStream);
            }
        }
    }

    支持

    May Be —— 搞开发,总有一天要做的事!


    拥有自己的服务器,无需再找攻略!

    Chinar 提供一站式教程,闭眼式创建!

    为新手节省宝贵时间,避免采坑!


    先点击领取 —— 阿里全产品优惠券 (享受最低优惠)


    1 —— 云服务器超全购买流程 (新手必备!)

    2 —— 阿里ECS云服务器自定义配置 - 购买教程(新手必备!)

    3—— Windows 服务器配置、运行、建站一条龙 !

    4 —— Linux 服务器配置、运行、建站一条龙 !





    技术交流群:806091680 ! Chinar 欢迎你的加入


    END

    本博客为非营利性个人原创,除部分有明确署名的作品外,所刊登的所有作品的著作权均为本人所拥有,本人保留所有法定权利。违者必究

    对于需要复制、转载、链接和传播博客文章或内容的,请及时和本博主进行联系,留言,Email: ichinar@icloud.com

    对于经本博主明确授权和许可使用文章及内容的,使用时请注明文章或内容出处并注明网址

  • 相关阅读:
    bzoj1066: [SCOI2007]蜥蜴(最大流)
    bzoj4551: [Tjoi2016&Heoi2016]树(树链剖分)
    bzoj2663: [Beijing wc2012]灵魂宝石(二分+匈牙利)
    bzoj2150: 部落战争(匈牙利)
    bzoj1797: [Ahoi2009]Mincut 最小割(最小割+强联通tarjan)
    bzoj3993: [SDOI2015]星际战争(网络流)
    bzoj3504: [Cqoi2014]危桥(网络流)
    bzoj3212: Pku3468 A Simple Problem with Integers(线段树)
    bzoj4590: [Shoi2015]自动刷题机(二分答案)
    [WC2013]糖果公园
  • 原文地址:https://www.cnblogs.com/chinarbolg/p/9601364.html
Copyright © 2020-2023  润新知