public int BinaryDeserialize(byte[] ioBuffer, int inOffset) { int offset = inOffset; offset = BinarySerializeUtils.Deserialize(ioBuffer, offset, out _name); offset = BinarySerializeUtils.Deserialize(ioBuffer, offset, out bool is_array); IsArray = is_array; offset = BinarySerializeUtils.Deserialize(ioBuffer, offset, out short size); _values.Clear(); for (int i = 0; i < size; i++) { offset = AddValue(ioBuffer, offset); } offset = BinarySerializeUtils.Deserialize(ioBuffer, offset, out size); _keys.Clear(); for (int i = 0; i < size; i++) { CKey child = CreateChild(this, string.Empty); offset = child.BinaryDeserialize(ioBuffer, offset); } return(offset); }
public static int BinaryDeserialize(byte[] ioBuffer, int inOffset, out Variant outValue) { int offset = inOffset; offset = BinarySerializeUtils.Deserialize(ioBuffer, offset, out byte vt); EValueType valueType = (EValueType)vt; ulong ulong_value = 0; string str = null; switch (valueType) { case EValueType.Bool: case EValueType.Byte: offset = BinarySerializeUtils.Deserialize(ioBuffer, offset, out byte byte_value); ulong_value = byte_value; break; case EValueType.Short: case EValueType.UShort: offset = BinarySerializeUtils.Deserialize(ioBuffer, offset, out ushort ushort_value); ulong_value = ushort_value; break; case EValueType.Int: case EValueType.UInt: case EValueType.Float: offset = BinarySerializeUtils.Deserialize(ioBuffer, offset, out uint uint_value); ulong_value = uint_value; break; case EValueType.Long: case EValueType.ULong: case EValueType.Double: offset = BinarySerializeUtils.Deserialize(ioBuffer, offset, out ulong_value); break; case EValueType.String: offset = BinarySerializeUtils.Deserialize(ioBuffer, offset, out str); break; default: throw new ArgumentException($"Unknow type of value: {valueType}"); } outValue = new Variant(); outValue._flags = (byte)valueType; outValue._ulong_value1 = ulong_value; outValue._objref = str; return(offset); }