private ValueTask <bool> CanReadTokenAsync(SecurityTokenHandler handler, XmlReader reader)
 {
     if (handler is IAsyncSecurityTokenHandler asyncHandler)
     {
         return(asyncHandler.CanReadTokenAsync(reader));
     }
     return(new ValueTask <bool>(handler.CanReadToken(reader)));
 }
        protected BootstrapContext(SerializationInfo info, StreamingContext context)
        {
            if (info == null)
            {
                return;
            }
            char chr = info.GetChar("K");

            if (chr == 'B')
            {
                this._tokenBytes = (byte[])info.GetValue("T", typeof(byte[]));
            }
            else
            {
                if (chr == 'S')
                {
                    this._tokenString = info.GetString("T");
                    return;
                }
                if (chr == 'T')
                {
                    SecurityTokenHandler securityTokenHandler = context.Context as SecurityTokenHandler;
                    if (securityTokenHandler == null)
                    {
                        this._tokenString = Encoding.UTF8.GetString(Convert.FromBase64String(info.GetString("T")));
                        return;
                    }
                    using (XmlDictionaryReader xmlDictionaryReader = XmlDictionaryReader.CreateTextReader(Convert.FromBase64String(info.GetString("T")), XmlDictionaryReaderQuotas.Max))
                    {
                        xmlDictionaryReader.MoveToContent();
                        if (securityTokenHandler.CanReadToken(xmlDictionaryReader))
                        {
                            string        localName     = xmlDictionaryReader.LocalName;
                            string        namespaceURI  = xmlDictionaryReader.NamespaceURI;
                            SecurityToken securityToken = securityTokenHandler.ReadToken(xmlDictionaryReader);
                            if (securityToken != null)
                            {
                                this._token = securityToken;
                            }
                            else
                            {
                                this._tokenString = Encoding.UTF8.GetString(Convert.FromBase64String(info.GetString("T")));
                                return;
                            }
                        }
                    }
                }
            }
        }