public virtual T decode <T>(Stream stream) { Type objectClass = typeof(T); ElementInfo elemInfo = new ElementInfo(); elemInfo.AnnotatedClass = objectClass; object objectInstance = null; if (CoderUtils.isImplements(objectClass, (typeof(IASN1PreparedElement)))) { objectInstance = createInstanceForElement(objectClass, elemInfo); } if (objectInstance != null && objectInstance is IASN1PreparedElement) { elemInfo.PreparedInstance = objectInstance; return((T)decodePreparedElement(decodeTag(stream), objectClass, elemInfo, stream).Value); } else { elemInfo.ASN1ElementInfo = CoderUtils.getAttribute <ASN1Element>(objectClass); return((T)decodeClassType(decodeTag(stream), objectClass, elemInfo, stream).Value); } }
public virtual DecodedObject <object> decodeClassType(DecodedObject <object> decodedTag, System.Type objectClass, ElementInfo elementInfo, System.IO.Stream stream) { if (CoderUtils.isImplements(objectClass, typeof(IASN1PreparedElement))) { return(decodePreparedElement(decodedTag, objectClass, elementInfo, stream)); } else if (elementInfo.hasPreparedInfo() && elementInfo.PreparedInfo.TypeMetadata != null) // Pavel { return(elementInfo.PreparedInfo.TypeMetadata.decode( this, decodedTag, objectClass, elementInfo, stream )); } else if (elementInfo.isAttributePresent <ASN1SequenceOf>()) { return(decodeSequenceOf(decodedTag, objectClass, elementInfo, stream)); } else if (elementInfo.isAttributePresent <ASN1Sequence>()) { return(decodeSequence(decodedTag, objectClass, elementInfo, stream)); } else if (elementInfo.isAttributePresent <ASN1Choice>()) { return(decodeChoice(decodedTag, objectClass, elementInfo, stream)); } else if (elementInfo.isAttributePresent <ASN1BoxedType>()) { return(decodeBoxedType(decodedTag, objectClass, elementInfo, stream)); } else if (elementInfo.isAttributePresent <ASN1Enum>()) { return(decodeEnum(decodedTag, objectClass, elementInfo, stream)); } else if (elementInfo.isAttributePresent <ASN1Boolean>()) { return(decodeBoolean(decodedTag, objectClass, elementInfo, stream)); } else if (elementInfo.isAttributePresent <ASN1Any>()) { return(decodeAny(decodedTag, objectClass, elementInfo, stream)); } else if (elementInfo.isAttributePresent <ASN1Integer>()) { return(decodeInteger(decodedTag, objectClass, elementInfo, stream)); } else if (elementInfo.isAttributePresent <ASN1Real>()) { return(decodeReal(decodedTag, objectClass, elementInfo, stream)); } else if (elementInfo.isAttributePresent <ASN1OctetString>()) { return(decodeOctetString(decodedTag, objectClass, elementInfo, stream)); } else if (elementInfo.isAttributePresent <ASN1BitString>() || elementInfo.AnnotatedClass.Equals(typeof(BitString))) { return(decodeBitString(decodedTag, objectClass, elementInfo, stream)); } else if (elementInfo.isAttributePresent <ASN1ObjectIdentifier>() || elementInfo.AnnotatedClass.Equals(typeof(ObjectIdentifier))) { return(decodeObjectIdentifier(decodedTag, objectClass, elementInfo, stream)); } else if (elementInfo.isAttributePresent <ASN1String>()) { return(decodeString(decodedTag, objectClass, elementInfo, stream)); } else if (elementInfo.isAttributePresent <ASN1Null>()) { return(decodeNull(decodedTag, objectClass, elementInfo, stream)); } else if (elementInfo.isAttributePresent <ASN1Element>()) { return(decodeElement(decodedTag, objectClass, elementInfo, stream)); } else { return(decodeCSElement(decodedTag, objectClass, elementInfo, stream)); } }