示例#1
0
        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);
        }