public IHandmadeSerializable[] DeserializeArray ( [NotNull] BinaryReader reader ) { Sure.NotNull(reader, nameof(reader)); int count = reader.ReadPackedInt32(); string typeName = reader.ReadString(); if (PrefixLength == PrefixLength.Short) { typeName = Namespace + "." + typeName; } Type type = ReferenceEquals(Assembly, null) ? Type.GetType(typeName, true) : Assembly.GetType(typeName, true); IHandmadeSerializable[] result = new IHandmadeSerializable[count]; for (int i = 0; i < count; i++) { IHandmadeSerializable obj = (IHandmadeSerializable)Activator.CreateInstance(type); obj.RestoreFromStream(reader); result[i] = obj; } return(result); }
public HandmadeSerializer Serialize ( [NotNull] BinaryWriter writer, [NotNull] IHandmadeSerializable obj ) { Sure.NotNull(writer, nameof(writer)); Sure.NotNull(obj, nameof(obj)); string typeName = GetTypeName(obj); writer.Write(typeName); obj.SaveToStream(writer); return(this); }
public HandmadeSerializer Serialize ( [NotNull] BinaryWriter writer, [NotNull][ItemNotNull] IHandmadeSerializable[] array ) { Sure.NotNull(writer, nameof(writer)); Sure.NotNull(array, nameof(array)); int count = array.Length; if (count == 0) { Log.Error ( nameof(HandmadeSerializer) + "::" + nameof(Serialize) + ": count=0" ); throw new ArgumentException(); } writer.WritePackedInt32(count); IHandmadeSerializable first = array[0]; string typeName = GetTypeName(first); writer.Write(typeName); foreach (IHandmadeSerializable obj in array) { obj.SaveToStream(writer); } return(this); }
public IHandmadeSerializable Deserialize ( [NotNull] BinaryReader reader ) { Sure.NotNull(reader, nameof(reader)); string typeName = reader.ReadString(); if (PrefixLength == PrefixLength.Short) { typeName = Namespace + "." + typeName; } Type type = ReferenceEquals(Assembly, null) ? Type.GetType(typeName, true) : Assembly.GetType(typeName, true); IHandmadeSerializable result = (IHandmadeSerializable)Activator.CreateInstance(type); result.RestoreFromStream(reader); return(result); }