/// <summary>
        /// Deserialize JSON into a FHIR QuestionnaireResponse#Item
        /// </summary>
        public static void DeserializeJsonProperty(this QuestionnaireResponse.ItemComponent current, ref Utf8JsonReader reader, JsonSerializerOptions options, string propertyName)
        {
            switch (propertyName)
            {
            case "linkId":
                if (reader.TokenType == JsonTokenType.Null)
                {
                    current.LinkIdElement = new FhirString();
                    reader.Skip();
                }
                else
                {
                    current.LinkIdElement = new FhirString(reader.GetString());
                }
                break;

            case "_linkId":
                if (current.LinkIdElement == null)
                {
                    current.LinkIdElement = new FhirString();
                }
                ((Hl7.Fhir.Model.Element)current.LinkIdElement).DeserializeJson(ref reader, options);
                break;

            case "definition":
                if (reader.TokenType == JsonTokenType.Null)
                {
                    current.DefinitionElement = new FhirUri();
                    reader.Skip();
                }
                else
                {
                    current.DefinitionElement = new FhirUri(reader.GetString());
                }
                break;

            case "_definition":
                if (current.DefinitionElement == null)
                {
                    current.DefinitionElement = new FhirUri();
                }
                ((Hl7.Fhir.Model.Element)current.DefinitionElement).DeserializeJson(ref reader, options);
                break;

            case "text":
                if (reader.TokenType == JsonTokenType.Null)
                {
                    current.TextElement = new FhirString();
                    reader.Skip();
                }
                else
                {
                    current.TextElement = new FhirString(reader.GetString());
                }
                break;

            case "_text":
                if (current.TextElement == null)
                {
                    current.TextElement = new FhirString();
                }
                ((Hl7.Fhir.Model.Element)current.TextElement).DeserializeJson(ref reader, options);
                break;

            case "answer":
                if ((reader.TokenType != JsonTokenType.StartArray) || (!reader.Read()))
                {
                    throw new JsonException($"ItemComponent error reading 'answer' expected StartArray, found {reader.TokenType}! depth: {reader.CurrentDepth}, pos: {reader.BytesConsumed}");
                }

                current.Answer = new List <QuestionnaireResponse.AnswerComponent>();

                while (reader.TokenType != JsonTokenType.EndArray)
                {
                    Hl7.Fhir.Model.QuestionnaireResponse.AnswerComponent v_Answer = new Hl7.Fhir.Model.QuestionnaireResponse.AnswerComponent();
                    v_Answer.DeserializeJson(ref reader, options);
                    current.Answer.Add(v_Answer);

                    if (!reader.Read())
                    {
                        throw new JsonException($"ItemComponent error reading 'answer' array, read failed! depth: {reader.CurrentDepth}, pos: {reader.BytesConsumed}");
                    }
                    if (reader.TokenType == JsonTokenType.EndObject)
                    {
                        reader.Read();
                    }
                }

                if (current.Answer.Count == 0)
                {
                    current.Answer = null;
                }
                break;

            case "item":
                if ((reader.TokenType != JsonTokenType.StartArray) || (!reader.Read()))
                {
                    throw new JsonException($"ItemComponent error reading 'item' expected StartArray, found {reader.TokenType}! depth: {reader.CurrentDepth}, pos: {reader.BytesConsumed}");
                }

                current.Item = new List <QuestionnaireResponse.ItemComponent>();

                while (reader.TokenType != JsonTokenType.EndArray)
                {
                    Hl7.Fhir.Model.QuestionnaireResponse.ItemComponent v_Item = new Hl7.Fhir.Model.QuestionnaireResponse.ItemComponent();
                    v_Item.DeserializeJson(ref reader, options);
                    current.Item.Add(v_Item);

                    if (!reader.Read())
                    {
                        throw new JsonException($"ItemComponent error reading 'item' array, read failed! depth: {reader.CurrentDepth}, pos: {reader.BytesConsumed}");
                    }
                    if (reader.TokenType == JsonTokenType.EndObject)
                    {
                        reader.Read();
                    }
                }

                if (current.Item.Count == 0)
                {
                    current.Item = null;
                }
                break;

            // Complex: item, Export: ItemComponent, Base: BackboneElement
            default:
                ((Hl7.Fhir.Model.BackboneElement)current).DeserializeJsonProperty(ref reader, options, propertyName);
                break;
            }
        }
        /// <summary>
        /// Deserialize JSON into a FHIR QuestionnaireResponse#Answer
        /// </summary>
        public static void DeserializeJsonProperty(this QuestionnaireResponse.AnswerComponent current, ref Utf8JsonReader reader, JsonSerializerOptions options, string propertyName)
        {
            switch (propertyName)
            {
            case "valueBoolean":
                if (reader.TokenType == JsonTokenType.Null)
                {
                    current.Value = new FhirBoolean();
                    reader.Skip();
                }
                else
                {
                    current.Value = new FhirBoolean(reader.GetBoolean());
                }
                break;

            case "_valueBoolean":
                if (current.Value == null)
                {
                    current.Value = new FhirBoolean();
                }
                ((Hl7.Fhir.Model.Element)current.Value).DeserializeJson(ref reader, options);
                break;

            case "valueDecimal":
                if (reader.TokenType == JsonTokenType.Null)
                {
                    current.Value = new FhirDecimal();
                    reader.Skip();
                }
                else
                {
                    current.Value = new FhirDecimal(reader.GetDecimal());
                }
                break;

            case "_valueDecimal":
                if (current.Value == null)
                {
                    current.Value = new FhirDecimal();
                }
                ((Hl7.Fhir.Model.Element)current.Value).DeserializeJson(ref reader, options);
                break;

            case "valueInteger":
                if (reader.TokenType == JsonTokenType.Null)
                {
                    current.Value = new Integer();
                    reader.Skip();
                }
                else
                {
                    current.Value = new Integer(reader.GetInt32());
                }
                break;

            case "_valueInteger":
                if (current.Value == null)
                {
                    current.Value = new Integer();
                }
                ((Hl7.Fhir.Model.Element)current.Value).DeserializeJson(ref reader, options);
                break;

            case "valueDate":
                if (reader.TokenType == JsonTokenType.Null)
                {
                    current.Value = new Date();
                    reader.Skip();
                }
                else
                {
                    current.Value = new Date(reader.GetString());
                }
                break;

            case "_valueDate":
                if (current.Value == null)
                {
                    current.Value = new Date();
                }
                ((Hl7.Fhir.Model.Element)current.Value).DeserializeJson(ref reader, options);
                break;

            case "valueDateTime":
                if (reader.TokenType == JsonTokenType.Null)
                {
                    current.Value = new FhirDateTime();
                    reader.Skip();
                }
                else
                {
                    current.Value = new FhirDateTime(reader.GetString());
                }
                break;

            case "_valueDateTime":
                if (current.Value == null)
                {
                    current.Value = new FhirDateTime();
                }
                ((Hl7.Fhir.Model.Element)current.Value).DeserializeJson(ref reader, options);
                break;

            case "valueTime":
                current.Value = new Hl7.Fhir.Model.Time();
                ((Hl7.Fhir.Model.Time)current.Value).DeserializeJson(ref reader, options);
                break;

            case "valueString":
                if (reader.TokenType == JsonTokenType.Null)
                {
                    current.Value = new FhirString();
                    reader.Skip();
                }
                else
                {
                    current.Value = new FhirString(reader.GetString());
                }
                break;

            case "_valueString":
                if (current.Value == null)
                {
                    current.Value = new FhirString();
                }
                ((Hl7.Fhir.Model.Element)current.Value).DeserializeJson(ref reader, options);
                break;

            case "valueUri":
                if (reader.TokenType == JsonTokenType.Null)
                {
                    current.Value = new FhirUri();
                    reader.Skip();
                }
                else
                {
                    current.Value = new FhirUri(reader.GetString());
                }
                break;

            case "_valueUri":
                if (current.Value == null)
                {
                    current.Value = new FhirUri();
                }
                ((Hl7.Fhir.Model.Element)current.Value).DeserializeJson(ref reader, options);
                break;

            case "valueAttachment":
                current.Value = new Hl7.Fhir.Model.Attachment();
                ((Hl7.Fhir.Model.Attachment)current.Value).DeserializeJson(ref reader, options);
                break;

            case "valueCoding":
                current.Value = new Hl7.Fhir.Model.Coding();
                ((Hl7.Fhir.Model.Coding)current.Value).DeserializeJson(ref reader, options);
                break;

            case "valueQuantity":
                current.Value = new Hl7.Fhir.Model.Quantity();
                ((Hl7.Fhir.Model.Quantity)current.Value).DeserializeJson(ref reader, options);
                break;

            case "valueReference":
                current.Value = new Hl7.Fhir.Model.ResourceReference();
                ((Hl7.Fhir.Model.ResourceReference)current.Value).DeserializeJson(ref reader, options);
                break;

            case "item":
                if ((reader.TokenType != JsonTokenType.StartArray) || (!reader.Read()))
                {
                    throw new JsonException($"AnswerComponent error reading 'item' expected StartArray, found {reader.TokenType}! depth: {reader.CurrentDepth}, pos: {reader.BytesConsumed}");
                }

                current.Item = new List <QuestionnaireResponse.ItemComponent>();

                while (reader.TokenType != JsonTokenType.EndArray)
                {
                    Hl7.Fhir.Model.QuestionnaireResponse.ItemComponent v_Item = new Hl7.Fhir.Model.QuestionnaireResponse.ItemComponent();
                    v_Item.DeserializeJson(ref reader, options);
                    current.Item.Add(v_Item);

                    if (!reader.Read())
                    {
                        throw new JsonException($"AnswerComponent error reading 'item' array, read failed! depth: {reader.CurrentDepth}, pos: {reader.BytesConsumed}");
                    }
                    if (reader.TokenType == JsonTokenType.EndObject)
                    {
                        reader.Read();
                    }
                }

                if (current.Item.Count == 0)
                {
                    current.Item = null;
                }
                break;

            // Complex: answer, Export: AnswerComponent, Base: BackboneElement
            default:
                ((Hl7.Fhir.Model.BackboneElement)current).DeserializeJsonProperty(ref reader, options, propertyName);
                break;
            }
        }
        /// <summary>
        /// Deserialize JSON into a FHIR QuestionnaireResponse
        /// </summary>
        public static void DeserializeJsonProperty(this QuestionnaireResponse current, ref Utf8JsonReader reader, JsonSerializerOptions options, string propertyName)
        {
            switch (propertyName)
            {
            case "identifier":
                current.Identifier = new Hl7.Fhir.Model.Identifier();
                ((Hl7.Fhir.Model.Identifier)current.Identifier).DeserializeJson(ref reader, options);
                break;

            case "basedOn":
                if ((reader.TokenType != JsonTokenType.StartArray) || (!reader.Read()))
                {
                    throw new JsonException($"QuestionnaireResponse error reading 'basedOn' expected StartArray, found {reader.TokenType}! depth: {reader.CurrentDepth}, pos: {reader.BytesConsumed}");
                }

                current.BasedOn = new List <ResourceReference>();

                while (reader.TokenType != JsonTokenType.EndArray)
                {
                    Hl7.Fhir.Model.ResourceReference v_BasedOn = new Hl7.Fhir.Model.ResourceReference();
                    v_BasedOn.DeserializeJson(ref reader, options);
                    current.BasedOn.Add(v_BasedOn);

                    if (!reader.Read())
                    {
                        throw new JsonException($"QuestionnaireResponse error reading 'basedOn' array, read failed! depth: {reader.CurrentDepth}, pos: {reader.BytesConsumed}");
                    }
                    if (reader.TokenType == JsonTokenType.EndObject)
                    {
                        reader.Read();
                    }
                }

                if (current.BasedOn.Count == 0)
                {
                    current.BasedOn = null;
                }
                break;

            case "partOf":
                if ((reader.TokenType != JsonTokenType.StartArray) || (!reader.Read()))
                {
                    throw new JsonException($"QuestionnaireResponse error reading 'partOf' expected StartArray, found {reader.TokenType}! depth: {reader.CurrentDepth}, pos: {reader.BytesConsumed}");
                }

                current.PartOf = new List <ResourceReference>();

                while (reader.TokenType != JsonTokenType.EndArray)
                {
                    Hl7.Fhir.Model.ResourceReference v_PartOf = new Hl7.Fhir.Model.ResourceReference();
                    v_PartOf.DeserializeJson(ref reader, options);
                    current.PartOf.Add(v_PartOf);

                    if (!reader.Read())
                    {
                        throw new JsonException($"QuestionnaireResponse error reading 'partOf' array, read failed! depth: {reader.CurrentDepth}, pos: {reader.BytesConsumed}");
                    }
                    if (reader.TokenType == JsonTokenType.EndObject)
                    {
                        reader.Read();
                    }
                }

                if (current.PartOf.Count == 0)
                {
                    current.PartOf = null;
                }
                break;

            case "questionnaire":
                if (reader.TokenType == JsonTokenType.Null)
                {
                    current.QuestionnaireElement = new Canonical();
                    reader.Skip();
                }
                else
                {
                    current.QuestionnaireElement = new Canonical(reader.GetString());
                }
                break;

            case "_questionnaire":
                if (current.QuestionnaireElement == null)
                {
                    current.QuestionnaireElement = new Canonical();
                }
                ((Hl7.Fhir.Model.Element)current.QuestionnaireElement).DeserializeJson(ref reader, options);
                break;

            case "status":
                if (reader.TokenType == JsonTokenType.Null)
                {
                    current.StatusElement = new Code <Hl7.Fhir.Model.QuestionnaireResponse.QuestionnaireResponseStatus>();
                    reader.Skip();
                }
                else
                {
                    current.StatusElement = new Code <Hl7.Fhir.Model.QuestionnaireResponse.QuestionnaireResponseStatus>(Hl7.Fhir.Utility.EnumUtility.ParseLiteral <Hl7.Fhir.Model.QuestionnaireResponse.QuestionnaireResponseStatus>(reader.GetString()));
                }
                break;

            case "_status":
                if (current.StatusElement == null)
                {
                    current.StatusElement = new Code <Hl7.Fhir.Model.QuestionnaireResponse.QuestionnaireResponseStatus>();
                }
                ((Hl7.Fhir.Model.Element)current.StatusElement).DeserializeJson(ref reader, options);
                break;

            case "subject":
                current.Subject = new Hl7.Fhir.Model.ResourceReference();
                ((Hl7.Fhir.Model.ResourceReference)current.Subject).DeserializeJson(ref reader, options);
                break;

            case "encounter":
                current.Encounter = new Hl7.Fhir.Model.ResourceReference();
                ((Hl7.Fhir.Model.ResourceReference)current.Encounter).DeserializeJson(ref reader, options);
                break;

            case "authored":
                if (reader.TokenType == JsonTokenType.Null)
                {
                    current.AuthoredElement = new FhirDateTime();
                    reader.Skip();
                }
                else
                {
                    current.AuthoredElement = new FhirDateTime(reader.GetString());
                }
                break;

            case "_authored":
                if (current.AuthoredElement == null)
                {
                    current.AuthoredElement = new FhirDateTime();
                }
                ((Hl7.Fhir.Model.Element)current.AuthoredElement).DeserializeJson(ref reader, options);
                break;

            case "author":
                current.Author = new Hl7.Fhir.Model.ResourceReference();
                ((Hl7.Fhir.Model.ResourceReference)current.Author).DeserializeJson(ref reader, options);
                break;

            case "source":
                current.Source = new Hl7.Fhir.Model.ResourceReference();
                ((Hl7.Fhir.Model.ResourceReference)current.Source).DeserializeJson(ref reader, options);
                break;

            case "item":
                if ((reader.TokenType != JsonTokenType.StartArray) || (!reader.Read()))
                {
                    throw new JsonException($"QuestionnaireResponse error reading 'item' expected StartArray, found {reader.TokenType}! depth: {reader.CurrentDepth}, pos: {reader.BytesConsumed}");
                }

                current.Item = new List <QuestionnaireResponse.ItemComponent>();

                while (reader.TokenType != JsonTokenType.EndArray)
                {
                    Hl7.Fhir.Model.QuestionnaireResponse.ItemComponent v_Item = new Hl7.Fhir.Model.QuestionnaireResponse.ItemComponent();
                    v_Item.DeserializeJson(ref reader, options);
                    current.Item.Add(v_Item);

                    if (!reader.Read())
                    {
                        throw new JsonException($"QuestionnaireResponse error reading 'item' array, read failed! depth: {reader.CurrentDepth}, pos: {reader.BytesConsumed}");
                    }
                    if (reader.TokenType == JsonTokenType.EndObject)
                    {
                        reader.Read();
                    }
                }

                if (current.Item.Count == 0)
                {
                    current.Item = null;
                }
                break;

            // Complex: QuestionnaireResponse, Export: QuestionnaireResponse, Base: DomainResource
            default:
                ((Hl7.Fhir.Model.DomainResource)current).DeserializeJsonProperty(ref reader, options, propertyName);
                break;
            }
        }