private static Type GetTypeFromManifestName(Stream stream, DeserializerSession session) { var typeName = stream.ReadLengthEncodedByteArray(session); var hashcode = stream.ReadInt32(session); return(AntTypeSerializer.GetTypeFromTypeKey(new TypeKey(hashcode, typeName))); }
public override void WriteValue(Stream stream, object value, SerializerSession session) { if (value == null) { stream.WriteLengthEncodedByteArray(EmptyArray <byte> .Instance, session); } else { var type = (Type)value; if (session.Serializer.Options.PreserveObjectReferences && session.TryGetObjectId(type, out int existingId)) { ObjectReferenceSerializer.Instance.WriteManifest(stream, session); ObjectReferenceSerializer.Instance.WriteValue(stream, existingId, session); } else { if (session.Serializer.Options.PreserveObjectReferences) { session.TrackSerializedObject(type); } //type was not written before, add it to the tacked object list var typeKey = AntTypeSerializer.GetTypeKeyFromType(type); stream.WriteLengthEncodedByteArray(typeKey.TypeName, session); Int32Serializer.WriteValueImpl(stream, typeKey.HashCode, session); } } }
public override object ReadValue(Stream stream, DeserializerSession session) { var typeName = stream.ReadLengthEncodedByteArray(session); if (typeName.Length == 0) { return(null); } var hashCode = stream.ReadInt32(session); var type = AntTypeSerializer.GetTypeFromTypeKey(new TypeKey(hashCode, typeName)); //add the deserialized type to lookup if (session.Serializer.Options.PreserveObjectReferences) { session.TrackDeserializedObject(type); } return(type); }