private JwtPayload doBuildPayload(PrivateClaims privateClaims, JWTOptions options)
        {
            JwtPayload payload = new JwtPayload();
            // ****START BUILD PAYLOAD****//
            // Adding private claims
            List <Claim> privateC = privateClaims.getAllClaims();

            foreach (Claim privateClaim in privateC)
            {
                if (privateClaim.getNestedClaims() != null)
                {
                    payload.Add(privateClaim.getKey(), privateClaim.getNestedClaims().getNestedMap());
                }
                else
                {
                    System.Security.Claims.Claim netPrivateClaim = null;
                    object obj = privateClaim.getValue();
                    if (obj.GetType() == typeof(string))
                    {
                        netPrivateClaim = new System.Security.Claims.Claim(privateClaim.getKey(), (string)privateClaim.getValue());
                    }
                    else if (obj.GetType() == typeof(int))
                    {
                        int value = (int)obj;
                        netPrivateClaim = new System.Security.Claims.Claim(privateClaim.getKey(), value.ToString(), System.Security.Claims.ClaimValueTypes.Integer32);
                    }
                    else if (obj.GetType() == typeof(long))
                    {
                        long value = (long)obj;
                        netPrivateClaim = new System.Security.Claims.Claim(privateClaim.getKey(), value.ToString(), System.Security.Claims.ClaimValueTypes.Integer64);
                    }
                    else if (obj.GetType() == typeof(double))
                    {
                        double value = (double)obj;
                        netPrivateClaim = new System.Security.Claims.Claim(privateClaim.getKey(), value.ToString(), System.Security.Claims.ClaimValueTypes.Double);
                    }
                    else if (obj.GetType() == typeof(bool))
                    {
                        bool value = (bool)obj;
                        netPrivateClaim = new System.Security.Claims.Claim(privateClaim.getKey(), value.ToString(), System.Security.Claims.ClaimValueTypes.Boolean);
                    }
                    else
                    {
                        this.error.setError("JW012", "Unrecognized data type");
                    }

                    //System.Security.Claims.Claim netPrivateClaim = new System.Security.Claims.Claim(privateClaim.getKey(), privateClaim.getValue());

                    payload.AddClaim(netPrivateClaim);
                }
            }
            // Adding public claims
            if (options.hasPublicClaims())
            {
                PublicClaims publicClaims = options.getAllPublicClaims();
                List <Claim> publicC      = publicClaims.getAllClaims();
                foreach (Claim publicClaim in publicC)
                {
                    System.Security.Claims.Claim netPublicClaim = new System.Security.Claims.Claim(publicClaim.getKey(), (string)publicClaim.getValue());
                    payload.AddClaim(netPublicClaim);
                }
            }
            // Adding registered claims
            if (options.hasRegisteredClaims())
            {
                RegisteredClaims registeredClaims = options.getAllRegisteredClaims();
                List <Claim>     registeredC      = registeredClaims.getAllClaims();
                foreach (Claim registeredClaim in registeredC)
                {
                    System.Security.Claims.Claim netRegisteredClaim;

                    if (RegisteredClaimUtils.isTimeValidatingClaim(registeredClaim.getKey()))
                    {
                        netRegisteredClaim = new System.Security.Claims.Claim(registeredClaim.getKey(), (string)registeredClaim.getValue(), System.Security.Claims.ClaimValueTypes.Integer32);
                    }
                    else
                    {
                        netRegisteredClaim = new System.Security.Claims.Claim(registeredClaim.getKey(), (string)registeredClaim.getValue());
                    }

                    payload.AddClaim(netRegisteredClaim);
                }
            }
            // ****END BUILD PAYLOAD****//
            return(payload);
        }