zoukankan      html  css  js  c++  java
  • unity json解析IPA后续

    以前说到的,有很大的限制,只能解析简单的类,如果复杂的就会有问题,从老外哪里看到一片博客,是将类中的list   等复杂对象序列化,

    using UnityEngine;
    using System.Collections;
    using System.Collections.Generic;
    using System;
    
    // List<T>
    [Serializable]
    public class Serialization<T>
    {
        [SerializeField]
        List<T> target;
        public List<T> ToList() { return target; }
    
        public Serialization(List<T> target)
        {
            this.target = target;
        }
    }
    
    // Dictionary<TKey, TValue>
    [Serializable]
    public class Serialization<TKey, TValue> : ISerializationCallbackReceiver
    {
        [SerializeField]
        List<TKey> keys;
        [SerializeField]
        List<TValue> values;
    
        Dictionary<TKey, TValue> target;
        public Dictionary<TKey, TValue> ToDictionary() { return target; }
    
        public Serialization(Dictionary<TKey, TValue> target)
        {
            this.target = target;
        }
    
        public void OnBeforeSerialize()
        {
            keys = new List<TKey>(target.Keys);
            values = new List<TValue>(target.Values);
        }
    
        public void OnAfterDeserialize()
        {
            var count = Math.Min(keys.Count, values.Count);
            target = new Dictionary<TKey, TValue>(count);
            for (var i = 0; i < count; ++i)
            {
                target.Add(keys[i], values[i]);
            }
        }
    }
    
    // BitArray
    [Serializable]
    public class SerializationBitArray : ISerializationCallbackReceiver
    {
        [SerializeField]
        string flags;
    
        BitArray target;
        public BitArray ToBitArray() { return target; }
    
        public SerializationBitArray(BitArray target)
        {
            this.target = target;
        }
    
        public void OnBeforeSerialize()
        {
            var ss = new System.Text.StringBuilder(target.Length);
            for (var i = 0; i < target.Length; ++i)
            {
                ss.Insert(0, target[i] ? '1' : '0');
            }
            flags = ss.ToString();
        }
    
        public void OnAfterDeserialize()
        {
            target = new BitArray(flags.Length);
            for (var i = 0; i < flags.Length; ++i)
            {
                target.Set(flags.Length - i - 1, flags[i] == '1');
            }
        }
    }
  • 相关阅读:
    51CTO资料索引 很不错
    extern和extern“c"作用详解 以及C和C++混合编程 在文章:3.深层揭密extern "C" 部分可以看到 .
    用VC++实现图像检索技术(转)
    OpenSceneGraph FAQ
    NeHe OpenGL教程 02 渲染第一个多边形
    C++经验谈(摘抄)
    利用条件编译实现工程定制版本的自动输出
    没有文件扩展".js"的脚本引擎 解决办法
    OpenGL FAQ
    NeHe OpenGL教程 01 创建OpenGL窗口
  • 原文地址:https://www.cnblogs.com/lzy575566/p/7753874.html
Copyright © 2011-2022 走看看