public static T Read(Stream stream, T instance, int version) { var minSupportedVersion = SerializerTypes.GetMinSupported(Type); if (version < minSupportedVersion) { throw new InvalidDataException($"Received version less than minimum supported ({ version } < { minSupportedVersion })"); } var boxedInstance = (object)instance; while (true) { var token = stream.ReadString(); if (token == SerializerTypes.TypeEndToken) { break; } if (!FieldsMap.TryGetValue(token, out BinField binField)) { continue; } var value = BinSerializer <object> .Deserialize(stream); binField.SetValue(boxedInstance, value); } return((T)boxedInstance); }
public static List <T> ReadList <T>(Stream stream, List <T> instance, int version) { var count = stream.ReadInt32(); instance.Capacity = count; for (int i = 0; i < count; i++) { var value = BinSerializer.Deserialize <T>(stream); instance.Add(value); } return(instance); }
public static Dictionary <TKey, TValue> ReadDictionary <TKey, TValue>(Stream stream, Dictionary <TKey, TValue> instance, int version) { var count = stream.ReadInt32(); for (int i = 0; i < count; i++) { var key = BinSerializer.Deserialize <TKey>(stream); var value = BinSerializer.Deserialize <TValue>(stream); instance.Add(key, value); } return(instance); }
public static T Deserialize <T>(Stream stream) { return(BinSerializer <T> .Deserialize(stream)); }