public ServiceNowLinkedService(object endpoint, ServiceNowAuthenticationType authenticationType)
        {
            if (endpoint == null)
            {
                throw new ArgumentNullException(nameof(endpoint));
            }

            Endpoint           = endpoint;
            AuthenticationType = authenticationType;
            Type = "ServiceNow";
        }
 internal ServiceNowLinkedService(string type, IntegrationRuntimeReference connectVia, string description, IDictionary <string, ParameterSpecification> parameters, IList <object> annotations, IDictionary <string, object> additionalProperties, object endpoint, ServiceNowAuthenticationType authenticationType, object username, SecretBase password, object clientId, SecretBase clientSecret, object useEncryptedEndpoints, object useHostVerification, object usePeerVerification, object encryptedCredential) : base(type, connectVia, description, parameters, annotations, additionalProperties)
 {
     Endpoint              = endpoint;
     AuthenticationType    = authenticationType;
     Username              = username;
     Password              = password;
     ClientId              = clientId;
     ClientSecret          = clientSecret;
     UseEncryptedEndpoints = useEncryptedEndpoints;
     UseHostVerification   = useHostVerification;
     UsePeerVerification   = usePeerVerification;
     EncryptedCredential   = encryptedCredential;
     Type = type ?? "ServiceNow";
 }
 internal static ServiceNowLinkedService DeserializeServiceNowLinkedService(JsonElement element)
 {
     string type = default;
     Optional<IntegrationRuntimeReference> connectVia = default;
     Optional<string> description = default;
     Optional<IDictionary<string, ParameterSpecification>> parameters = default;
     Optional<IList<object>> annotations = default;
     object endpoint = default;
     ServiceNowAuthenticationType authenticationType = default;
     Optional<object> username = default;
     Optional<SecretBase> password = default;
     Optional<object> clientId = default;
     Optional<SecretBase> clientSecret = default;
     Optional<object> useEncryptedEndpoints = default;
     Optional<object> useHostVerification = default;
     Optional<object> usePeerVerification = default;
     Optional<object> encryptedCredential = default;
     IDictionary<string, object> additionalProperties = default;
     Dictionary<string, object> additionalPropertiesDictionary = new Dictionary<string, object>();
     foreach (var property in element.EnumerateObject())
     {
         if (property.NameEquals("type"))
         {
             type = property.Value.GetString();
             continue;
         }
         if (property.NameEquals("connectVia"))
         {
             if (property.Value.ValueKind == JsonValueKind.Null)
             {
                 property.ThrowNonNullablePropertyIsNull();
                 continue;
             }
             connectVia = IntegrationRuntimeReference.DeserializeIntegrationRuntimeReference(property.Value);
             continue;
         }
         if (property.NameEquals("description"))
         {
             description = property.Value.GetString();
             continue;
         }
         if (property.NameEquals("parameters"))
         {
             if (property.Value.ValueKind == JsonValueKind.Null)
             {
                 property.ThrowNonNullablePropertyIsNull();
                 continue;
             }
             Dictionary<string, ParameterSpecification> dictionary = new Dictionary<string, ParameterSpecification>();
             foreach (var property0 in property.Value.EnumerateObject())
             {
                 dictionary.Add(property0.Name, ParameterSpecification.DeserializeParameterSpecification(property0.Value));
             }
             parameters = dictionary;
             continue;
         }
         if (property.NameEquals("annotations"))
         {
             if (property.Value.ValueKind == JsonValueKind.Null)
             {
                 property.ThrowNonNullablePropertyIsNull();
                 continue;
             }
             List<object> array = new List<object>();
             foreach (var item in property.Value.EnumerateArray())
             {
                 array.Add(item.GetObject());
             }
             annotations = array;
             continue;
         }
         if (property.NameEquals("typeProperties"))
         {
             if (property.Value.ValueKind == JsonValueKind.Null)
             {
                 property.ThrowNonNullablePropertyIsNull();
                 continue;
             }
             foreach (var property0 in property.Value.EnumerateObject())
             {
                 if (property0.NameEquals("endpoint"))
                 {
                     endpoint = property0.Value.GetObject();
                     continue;
                 }
                 if (property0.NameEquals("authenticationType"))
                 {
                     authenticationType = new ServiceNowAuthenticationType(property0.Value.GetString());
                     continue;
                 }
                 if (property0.NameEquals("username"))
                 {
                     if (property0.Value.ValueKind == JsonValueKind.Null)
                     {
                         property0.ThrowNonNullablePropertyIsNull();
                         continue;
                     }
                     username = property0.Value.GetObject();
                     continue;
                 }
                 if (property0.NameEquals("password"))
                 {
                     if (property0.Value.ValueKind == JsonValueKind.Null)
                     {
                         property0.ThrowNonNullablePropertyIsNull();
                         continue;
                     }
                     password = SecretBase.DeserializeSecretBase(property0.Value);
                     continue;
                 }
                 if (property0.NameEquals("clientId"))
                 {
                     if (property0.Value.ValueKind == JsonValueKind.Null)
                     {
                         property0.ThrowNonNullablePropertyIsNull();
                         continue;
                     }
                     clientId = property0.Value.GetObject();
                     continue;
                 }
                 if (property0.NameEquals("clientSecret"))
                 {
                     if (property0.Value.ValueKind == JsonValueKind.Null)
                     {
                         property0.ThrowNonNullablePropertyIsNull();
                         continue;
                     }
                     clientSecret = SecretBase.DeserializeSecretBase(property0.Value);
                     continue;
                 }
                 if (property0.NameEquals("useEncryptedEndpoints"))
                 {
                     if (property0.Value.ValueKind == JsonValueKind.Null)
                     {
                         property0.ThrowNonNullablePropertyIsNull();
                         continue;
                     }
                     useEncryptedEndpoints = property0.Value.GetObject();
                     continue;
                 }
                 if (property0.NameEquals("useHostVerification"))
                 {
                     if (property0.Value.ValueKind == JsonValueKind.Null)
                     {
                         property0.ThrowNonNullablePropertyIsNull();
                         continue;
                     }
                     useHostVerification = property0.Value.GetObject();
                     continue;
                 }
                 if (property0.NameEquals("usePeerVerification"))
                 {
                     if (property0.Value.ValueKind == JsonValueKind.Null)
                     {
                         property0.ThrowNonNullablePropertyIsNull();
                         continue;
                     }
                     usePeerVerification = property0.Value.GetObject();
                     continue;
                 }
                 if (property0.NameEquals("encryptedCredential"))
                 {
                     if (property0.Value.ValueKind == JsonValueKind.Null)
                     {
                         property0.ThrowNonNullablePropertyIsNull();
                         continue;
                     }
                     encryptedCredential = property0.Value.GetObject();
                     continue;
                 }
             }
             continue;
         }
         additionalPropertiesDictionary.Add(property.Name, property.Value.GetObject());
     }
     additionalProperties = additionalPropertiesDictionary;
     return new ServiceNowLinkedService(type, connectVia.Value, description.Value, Optional.ToDictionary(parameters), Optional.ToList(annotations), additionalProperties, endpoint, authenticationType, username.Value, password.Value, clientId.Value, clientSecret.Value, useEncryptedEndpoints.Value, useHostVerification.Value, usePeerVerification.Value, encryptedCredential.Value);
 }
        internal static ServiceNowLinkedService DeserializeServiceNowLinkedService(JsonElement element)
        {
            string type = default;
            IntegrationRuntimeReference connectVia = default;
            string description = default;
            IDictionary <string, ParameterSpecification> parameters = default;
            IList <object> annotations = default;
            object         endpoint    = default;
            ServiceNowAuthenticationType authenticationType = default;
            object     username              = default;
            SecretBase password              = default;
            object     clientId              = default;
            SecretBase clientSecret          = default;
            object     useEncryptedEndpoints = default;
            object     useHostVerification   = default;
            object     usePeerVerification   = default;
            object     encryptedCredential   = default;
            IDictionary <string, object> additionalProperties           = default;
            Dictionary <string, object>  additionalPropertiesDictionary = default;

            foreach (var property in element.EnumerateObject())
            {
                if (property.NameEquals("type"))
                {
                    type = property.Value.GetString();
                    continue;
                }
                if (property.NameEquals("connectVia"))
                {
                    if (property.Value.ValueKind == JsonValueKind.Null)
                    {
                        continue;
                    }
                    connectVia = IntegrationRuntimeReference.DeserializeIntegrationRuntimeReference(property.Value);
                    continue;
                }
                if (property.NameEquals("description"))
                {
                    if (property.Value.ValueKind == JsonValueKind.Null)
                    {
                        continue;
                    }
                    description = property.Value.GetString();
                    continue;
                }
                if (property.NameEquals("parameters"))
                {
                    if (property.Value.ValueKind == JsonValueKind.Null)
                    {
                        continue;
                    }
                    Dictionary <string, ParameterSpecification> dictionary = new Dictionary <string, ParameterSpecification>();
                    foreach (var property0 in property.Value.EnumerateObject())
                    {
                        if (property0.Value.ValueKind == JsonValueKind.Null)
                        {
                            dictionary.Add(property0.Name, null);
                        }
                        else
                        {
                            dictionary.Add(property0.Name, ParameterSpecification.DeserializeParameterSpecification(property0.Value));
                        }
                    }
                    parameters = dictionary;
                    continue;
                }
                if (property.NameEquals("annotations"))
                {
                    if (property.Value.ValueKind == JsonValueKind.Null)
                    {
                        continue;
                    }
                    List <object> array = new List <object>();
                    foreach (var item in property.Value.EnumerateArray())
                    {
                        if (item.ValueKind == JsonValueKind.Null)
                        {
                            array.Add(null);
                        }
                        else
                        {
                            array.Add(item.GetObject());
                        }
                    }
                    annotations = array;
                    continue;
                }
                if (property.NameEquals("typeProperties"))
                {
                    foreach (var property0 in property.Value.EnumerateObject())
                    {
                        if (property0.NameEquals("endpoint"))
                        {
                            endpoint = property0.Value.GetObject();
                            continue;
                        }
                        if (property0.NameEquals("authenticationType"))
                        {
                            authenticationType = new ServiceNowAuthenticationType(property0.Value.GetString());
                            continue;
                        }
                        if (property0.NameEquals("username"))
                        {
                            if (property0.Value.ValueKind == JsonValueKind.Null)
                            {
                                continue;
                            }
                            username = property0.Value.GetObject();
                            continue;
                        }
                        if (property0.NameEquals("password"))
                        {
                            if (property0.Value.ValueKind == JsonValueKind.Null)
                            {
                                continue;
                            }
                            password = SecretBase.DeserializeSecretBase(property0.Value);
                            continue;
                        }
                        if (property0.NameEquals("clientId"))
                        {
                            if (property0.Value.ValueKind == JsonValueKind.Null)
                            {
                                continue;
                            }
                            clientId = property0.Value.GetObject();
                            continue;
                        }
                        if (property0.NameEquals("clientSecret"))
                        {
                            if (property0.Value.ValueKind == JsonValueKind.Null)
                            {
                                continue;
                            }
                            clientSecret = SecretBase.DeserializeSecretBase(property0.Value);
                            continue;
                        }
                        if (property0.NameEquals("useEncryptedEndpoints"))
                        {
                            if (property0.Value.ValueKind == JsonValueKind.Null)
                            {
                                continue;
                            }
                            useEncryptedEndpoints = property0.Value.GetObject();
                            continue;
                        }
                        if (property0.NameEquals("useHostVerification"))
                        {
                            if (property0.Value.ValueKind == JsonValueKind.Null)
                            {
                                continue;
                            }
                            useHostVerification = property0.Value.GetObject();
                            continue;
                        }
                        if (property0.NameEquals("usePeerVerification"))
                        {
                            if (property0.Value.ValueKind == JsonValueKind.Null)
                            {
                                continue;
                            }
                            usePeerVerification = property0.Value.GetObject();
                            continue;
                        }
                        if (property0.NameEquals("encryptedCredential"))
                        {
                            if (property0.Value.ValueKind == JsonValueKind.Null)
                            {
                                continue;
                            }
                            encryptedCredential = property0.Value.GetObject();
                            continue;
                        }
                    }
                    continue;
                }
                additionalPropertiesDictionary ??= new Dictionary <string, object>();
                if (property.Value.ValueKind == JsonValueKind.Null)
                {
                    additionalPropertiesDictionary.Add(property.Name, null);
                }
                else
                {
                    additionalPropertiesDictionary.Add(property.Name, property.Value.GetObject());
                }
            }
            additionalProperties = additionalPropertiesDictionary;
            return(new ServiceNowLinkedService(type, connectVia, description, parameters, annotations, additionalProperties, endpoint, authenticationType, username, password, clientId, clientSecret, useEncryptedEndpoints, useHostVerification, usePeerVerification, encryptedCredential));
        }