void IUtf8JsonSerializable.Write(Utf8JsonWriter writer)
 {
     writer.WriteStartObject();
     writer.WritePropertyName("typeName");
     writer.WriteStringValue(TypeDefinition.ToString());
     writer.WritePropertyName("redirectType");
     writer.WriteStringValue(RedirectType.ToString());
     if (Optional.IsDefined(DestinationProtocol))
     {
         writer.WritePropertyName("destinationProtocol");
         writer.WriteStringValue(DestinationProtocol.Value.ToString());
     }
     if (Optional.IsDefined(CustomPath))
     {
         writer.WritePropertyName("customPath");
         writer.WriteStringValue(CustomPath);
     }
     if (Optional.IsDefined(CustomHostname))
     {
         writer.WritePropertyName("customHostname");
         writer.WriteStringValue(CustomHostname);
     }
     if (Optional.IsDefined(CustomQueryString))
     {
         writer.WritePropertyName("customQueryString");
         writer.WriteStringValue(CustomQueryString);
     }
     if (Optional.IsDefined(CustomFragment))
     {
         writer.WritePropertyName("customFragment");
         writer.WriteStringValue(CustomFragment);
     }
     writer.WriteEndObject();
 }
        internal static UriRedirectActionDefinition DeserializeUriRedirectActionDefinition(JsonElement element)
        {
            UriRedirectActionType          typeName            = default;
            RedirectType                   redirectType        = default;
            Optional <DestinationProtocol> destinationProtocol = default;
            Optional <string>              customPath          = default;
            Optional <string>              customHostname      = default;
            Optional <string>              customQueryString   = default;
            Optional <string>              customFragment      = default;

            foreach (var property in element.EnumerateObject())
            {
                if (property.NameEquals("typeName"))
                {
                    typeName = new UriRedirectActionType(property.Value.GetString());
                    continue;
                }
                if (property.NameEquals("redirectType"))
                {
                    redirectType = new RedirectType(property.Value.GetString());
                    continue;
                }
                if (property.NameEquals("destinationProtocol"))
                {
                    if (property.Value.ValueKind == JsonValueKind.Null)
                    {
                        property.ThrowNonNullablePropertyIsNull();
                        continue;
                    }
                    destinationProtocol = new DestinationProtocol(property.Value.GetString());
                    continue;
                }
                if (property.NameEquals("customPath"))
                {
                    customPath = property.Value.GetString();
                    continue;
                }
                if (property.NameEquals("customHostname"))
                {
                    customHostname = property.Value.GetString();
                    continue;
                }
                if (property.NameEquals("customQueryString"))
                {
                    customQueryString = property.Value.GetString();
                    continue;
                }
                if (property.NameEquals("customFragment"))
                {
                    customFragment = property.Value.GetString();
                    continue;
                }
            }
            return(new UriRedirectActionDefinition(typeName, redirectType, Optional.ToNullable(destinationProtocol), customPath.Value, customHostname.Value, customQueryString.Value, customFragment.Value));
        }