private static void ReadAdditionalTypeInfo(DeserializationState state, ElementWithTypeInfo member) { switch (state.typeInfos[member]) { case BinaryTypeEnumeration.Primitive: case BinaryTypeEnumeration.PrimitiveArray: state.primitiveTypeInfos.Add(member, (PrimitiveTypeEnumeration)state.array.ReadByteFromBytes(ref state.idx)); break; case BinaryTypeEnumeration.SystemClass: member.TypeName = state.array.Read7BitLengthPrefixedString(ref state.idx); break; case BinaryTypeEnumeration.Class: member.TypeName = state.array.Read7BitLengthPrefixedString(ref state.idx); member.AssemblyName = state.assemblies[state.array.ReadInt32LEFromBytes(ref state.idx)]; break; } }
private static void WriteAssemblyName(SerializationState state, ElementWithTypeInfo element) { if (element != null) { var assName = element.AssemblyName; Int32 id; if (state.TryAddAssemblyName(assName, out id)) { var strByteCount = UTF8.GetByteCount(assName); state.EnsureCapacity(10 + strByteCount); state.array .WriteByteToBytes(ref state.idx, (Byte)RecordTypeEnumeration.BinaryLibrary) .WriteInt32LEToBytes(ref state.idx, id) .WriteInt32Encoded7Bit(ref state.idx, strByteCount) .WriteStringToBytes(ref state.idx, UTF8, assName); state.WriteArrayToStream(); } } }