//反序列化 public override void Deserialize(IoBuffer stream) { int changeCount = stream.ReadInt32(); #if SERIALIZE_DEBUG SerializeUtil.BeginParentLog(this, changeCount, false); #endif for (int i = 0; i < changeCount; ++i) { enSerializeChangeType type = (enSerializeChangeType)stream.ReadByte(); int idx = -1; if (type != enSerializeChangeType.clear) { idx = stream.ReadInt32(); } #if SERIALIZE_DEBUG SerializeUtil.BeginChangeLog(i, type, idx.ToString()); #endif if (type == enSerializeChangeType.add) { T item = (T)Activator.CreateInstance(typeof(T)); item.Parent = this; item.Idx = idx; item.Deserialize(stream); _dict[item.Idx] = item; } else if (type == enSerializeChangeType.remove) { if (!_dict.Remove(idx)) { Debuger.LogError("同步失败"); } } else if (type == enSerializeChangeType.change) { T item = _dict.Get(idx); if (item == null) { Debuger.LogError("同步失败2"); } item.Deserialize(stream); } else if (type == enSerializeChangeType.clear) { _dict.Clear(); } #if SERIALIZE_DEBUG SerializeUtil.EndChangeLog(); #endif } #if SERIALIZE_DEBUG SerializeUtil.EndParentLog(this); #endif }
//反序列化 public override void Deserialize(IoBuffer stream) { int changeCount = stream.ReadInt32(); #if SERIALIZE_DEBUG SerializeUtil.BeginParentLog(this, changeCount, false); #endif for (int i = 0; i < changeCount; ++i) { enSerializeChangeType type = (enSerializeChangeType)stream.ReadByte(); int idx = -1; if (type != enSerializeChangeType.clear) { idx = stream.ReadInt32(); } #if SERIALIZE_DEBUG SerializeUtil.BeginChangeLog(i, type, idx.ToString()); #endif if (type == enSerializeChangeType.add) { T item = (T)Activator.CreateInstance(typeof(T)); item.Parent = this; item.Idx = idx; item.Deserialize(stream); _list.Insert(item.Idx, item); } else if (type == enSerializeChangeType.remove) { _list.RemoveAt(idx); } else if (type == enSerializeChangeType.change) { _list[idx].Deserialize(stream); } else if (type == enSerializeChangeType.clear) { _list.Clear(); } #if SERIALIZE_DEBUG SerializeUtil.EndChangeLog(); #endif } #if SERIALIZE_DEBUG SerializeUtil.EndParentLog(this); #endif }
public static void BeginChangeLog(int idx, enSerializeChangeType type, string head = "") { SerializeUtil.log += string.Format("{0}{1} {2} {3} [", "".PadLeft(indent * 4, ' '), "" /*idx*/, type == enSerializeChangeType.change ? "":type.ToString(), head == "-1" ? "" : head); ++indent; }