以前说到的,有很大的限制,只能解析简单的类,如果复杂的就会有问题,从老外哪里看到一片博客,是将类中的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');}} }