/// <summary> /// Deserializes an object from a binary stream /// </summary> /// <param name="expectedType">The type that is expected to be deserialized</param> /// <param name="reader">The <see cref="BinaryTokenStreamReader"/></param> /// <returns>The deserialized object</returns> public object Deserialize(Type expectedType, BinaryTokenStreamReader reader) { if (expectedType == null) { throw new ArgumentNullException("expectedType"); } if (reader == null) { throw new ArgumentNullException("reader"); } var typeHandle = expectedType.TypeHandle; MessageParser parser = null; if (!Parsers.TryGetValue(typeHandle, out parser)) { throw new ArgumentException("No parser found for the expected type " + expectedType, "expectedType"); } int length = reader.ReadInt(); if (length == 0) { // the special null case. return(null); } byte[] data = reader.ReadBytes(length); object message = parser.ParseFrom(data); return(message); }
public static TypeKey ReadTypeKey(BinaryTokenStreamReader reader) { var hashCode = reader.ReadInt(); var count = reader.ReadUShort(); var typeName = reader.ReadBytes(count); return(new TypeKey(hashCode, typeName)); }
private Type ReadNamedType(BinaryTokenStreamReader reader) { var hashCode = reader.ReadInt(); var count = reader.ReadUShort(); var typeName = reader.ReadBytes(count); return(this.typeKeyCache.GetOrAdd( new TypeKey(hashCode, typeName), k => Type.GetType(Encoding.UTF8.GetString(k.TypeName), throwOnError: true))); }
public object Deserialize(Type expectedType, BinaryTokenStreamReader reader) { if (reader == null) { throw new ArgumentNullException("reader"); } var n = reader.ReadInt(); var bytes = reader.ReadBytes(n); var formatter = new BinaryFormatter(); object retVal = null; using (var memoryStream = new MemoryStream(bytes)) { retVal = formatter.Deserialize(memoryStream); } return retVal; }
public object Deserialize(Type expectedType, BinaryTokenStreamReader reader) { if (reader == null) { throw new ArgumentNullException("reader"); } var n = reader.ReadInt(); var bytes = reader.ReadBytes(n); var formatter = new BinaryFormatter(); object retVal = null; using (var memoryStream = new MemoryStream(bytes)) { retVal = formatter.Deserialize(memoryStream); } return(retVal); }
/// <summary> /// Deserializes an object from a binary stream /// </summary> /// <param name="expectedType">The type that is expected to be deserialized</param> /// <param name="reader">The <see cref="BinaryTokenStreamReader"/></param> /// <returns>The deserialized object</returns> public object Deserialize(Type expectedType, BinaryTokenStreamReader reader) { if (expectedType == null) { throw new ArgumentNullException("expectedType"); } if (reader == null) { throw new ArgumentNullException("reader"); } var typeHandle = expectedType.TypeHandle; object parser = null; if (!Parsers.TryGetValue(typeHandle, out parser)) { throw new ArgumentException("No parser found for the expected type " + expectedType, "expectedType"); } int length = reader.ReadInt(); if (length == 0) { // the special null case. return null; } byte[] data = reader.ReadBytes(length); dynamic dynamicParser = parser; object message = dynamicParser.ParseFrom(data); return message; }
public static object Deserializer(Type expected, BinaryTokenStreamReader stream) => Deserialize(stream.ReadBytes(stream.ReadInt()));