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');
            }
        }
    }
  • 相关阅读:
    移动端WEB开发真机测试
    前端自学路线之js篇
    学习提高你CSS技术的法则
    day-5元组专区
    day5-列表专区
    day4-字符串专区
    day2-day3基本数据类型专区
    day1-习题
    day1-python条件语句和基本数据类型
    day1-python初识以及变量
  • 原文地址:https://www.cnblogs.com/lzy575566/p/7753874.html
Copyright © 2011-2022 走看看