public static void SerializeImmunizationProfileRecommendationComponent(Hl7.Fhir.Model.ImmunizationProfile.ImmunizationProfileRecommendationComponent value, IFhirWriter writer, bool summary)
        {
            writer.WriteStartComplexContent();

            // Serialize element _id
            if (value.LocalIdElement != null)
            {
                writer.WritePrimitiveContents("_id", value.LocalIdElement, XmlSerializationHint.Attribute);
            }

            // Serialize element extension
            if (value.Extension != null && !summary && value.Extension.Count > 0)
            {
                writer.WriteStartArrayElement("extension");
                foreach (var item in value.Extension)
                {
                    writer.WriteStartArrayMember("extension");
                    ExtensionSerializer.SerializeExtension(item, writer, summary);
                    writer.WriteEndArrayMember();
                }
                writer.WriteEndArrayElement();
            }

            // Serialize element recommendationDate
            if (value.RecommendationDateElement != null)
            {
                writer.WriteStartElement("recommendationDate");
                FhirDateTimeSerializer.SerializeFhirDateTime(value.RecommendationDateElement, writer, summary);
                writer.WriteEndElement();
            }

            // Serialize element vaccineType
            if (value.VaccineType != null)
            {
                writer.WriteStartElement("vaccineType");
                CodeableConceptSerializer.SerializeCodeableConcept(value.VaccineType, writer, summary);
                writer.WriteEndElement();
            }

            // Serialize element doseNumber
            if (value.DoseNumberElement != null)
            {
                writer.WriteStartElement("doseNumber");
                IntegerSerializer.SerializeInteger(value.DoseNumberElement, writer, summary);
                writer.WriteEndElement();
            }

            // Serialize element forecastStatus
            if (value.ForecastStatusElement != null)
            {
                writer.WriteStartElement("forecastStatus");
                CodeSerializer.SerializeCode <Hl7.Fhir.Model.ImmunizationProfile.ImmunizationForecastStatus>(value.ForecastStatusElement, writer, summary);
                writer.WriteEndElement();
            }

            // Serialize element dateCriterion
            if (value.DateCriterion != null && value.DateCriterion.Count > 0)
            {
                writer.WriteStartArrayElement("dateCriterion");
                foreach (var item in value.DateCriterion)
                {
                    writer.WriteStartArrayMember("dateCriterion");
                    ImmunizationProfileSerializer.SerializeImmunizationProfileRecommendationDateCriterionComponent(item, writer, summary);
                    writer.WriteEndArrayMember();
                }
                writer.WriteEndArrayElement();
            }

            // Serialize element protocol
            if (value.Protocol != null)
            {
                writer.WriteStartElement("protocol");
                ImmunizationProfileSerializer.SerializeImmunizationProfileRecommendationProtocolComponent(value.Protocol, writer, summary);
                writer.WriteEndElement();
            }

            // Serialize element supportingImmunization
            if (value.SupportingImmunization != null && value.SupportingImmunization.Count > 0)
            {
                writer.WriteStartArrayElement("supportingImmunization");
                foreach (var item in value.SupportingImmunization)
                {
                    writer.WriteStartArrayMember("supportingImmunization");
                    ResourceReferenceSerializer.SerializeResourceReference(item, writer, summary);
                    writer.WriteEndArrayMember();
                }
                writer.WriteEndArrayElement();
            }

            // Serialize element supportingAdverseEventReport
            if (value.SupportingAdverseEventReport != null && value.SupportingAdverseEventReport.Count > 0)
            {
                writer.WriteStartArrayElement("supportingAdverseEventReport");
                foreach (var item in value.SupportingAdverseEventReport)
                {
                    writer.WriteStartArrayMember("supportingAdverseEventReport");
                    ImmunizationProfileSerializer.SerializeImmunizationProfileRecommendationSupportingAdverseEventReportComponent(item, writer, summary);
                    writer.WriteEndArrayMember();
                }
                writer.WriteEndArrayElement();
            }

            // Serialize element supportingPatientObservation
            if (value.SupportingPatientObservation != null && value.SupportingPatientObservation.Count > 0)
            {
                writer.WriteStartArrayElement("supportingPatientObservation");
                foreach (var item in value.SupportingPatientObservation)
                {
                    writer.WriteStartArrayMember("supportingPatientObservation");
                    ResourceReferenceSerializer.SerializeResourceReference(item, writer, summary);
                    writer.WriteEndArrayMember();
                }
                writer.WriteEndArrayElement();
            }


            writer.WriteEndComplexContent();
        }
        /// <summary>
        /// Parse ImmunizationProfileRecommendationComponent
        /// </summary>
        public static Hl7.Fhir.Model.ImmunizationProfile.ImmunizationProfileRecommendationComponent ParseImmunizationProfileRecommendationComponent(IFhirReader reader, ErrorList errors, Hl7.Fhir.Model.ImmunizationProfile.ImmunizationProfileRecommendationComponent existingInstance = null)
        {
            Hl7.Fhir.Model.ImmunizationProfile.ImmunizationProfileRecommendationComponent result = existingInstance != null ? existingInstance : new Hl7.Fhir.Model.ImmunizationProfile.ImmunizationProfileRecommendationComponent();
            string currentElementName = reader.CurrentElementName;

            reader.EnterElement();

            while (reader.HasMoreElements())
            {
                var atName = reader.CurrentElementName;
                // Parse element extension
                if (atName == "extension")
                {
                    result.Extension = new List <Hl7.Fhir.Model.Extension>();
                    reader.EnterArray();

                    while (ParserUtils.IsAtArrayElement(reader, "extension"))
                    {
                        result.Extension.Add(ExtensionParser.ParseExtension(reader, errors));
                    }

                    reader.LeaveArray();
                }

                // Parse element _id
                else if (atName == "_id")
                {
                    result.LocalIdElement = Id.Parse(reader.ReadPrimitiveContents(typeof(Id)));
                }

                // Parse element recommendationDate
                else if (atName == "recommendationDate")
                {
                    result.RecommendationDateElement = FhirDateTimeParser.ParseFhirDateTime(reader, errors);
                }

                // Parse element vaccineType
                else if (atName == "vaccineType")
                {
                    result.VaccineType = CodeableConceptParser.ParseCodeableConcept(reader, errors);
                }

                // Parse element doseNumber
                else if (atName == "doseNumber")
                {
                    result.DoseNumberElement = IntegerParser.ParseInteger(reader, errors);
                }

                // Parse element forecastStatus
                else if (atName == "forecastStatus")
                {
                    result.ForecastStatusElement = CodeParser.ParseCode <Hl7.Fhir.Model.ImmunizationProfile.ImmunizationForecastStatus>(reader, errors);
                }

                // Parse element dateCriterion
                else if (atName == "dateCriterion")
                {
                    result.DateCriterion = new List <Hl7.Fhir.Model.ImmunizationProfile.ImmunizationProfileRecommendationDateCriterionComponent>();
                    reader.EnterArray();

                    while (ParserUtils.IsAtArrayElement(reader, "dateCriterion"))
                    {
                        result.DateCriterion.Add(ImmunizationProfileParser.ParseImmunizationProfileRecommendationDateCriterionComponent(reader, errors));
                    }

                    reader.LeaveArray();
                }

                // Parse element protocol
                else if (atName == "protocol")
                {
                    result.Protocol = ImmunizationProfileParser.ParseImmunizationProfileRecommendationProtocolComponent(reader, errors);
                }

                // Parse element supportingImmunization
                else if (atName == "supportingImmunization")
                {
                    result.SupportingImmunization = new List <Hl7.Fhir.Model.ResourceReference>();
                    reader.EnterArray();

                    while (ParserUtils.IsAtArrayElement(reader, "supportingImmunization"))
                    {
                        result.SupportingImmunization.Add(ResourceReferenceParser.ParseResourceReference(reader, errors));
                    }

                    reader.LeaveArray();
                }

                // Parse element supportingAdverseEventReport
                else if (atName == "supportingAdverseEventReport")
                {
                    result.SupportingAdverseEventReport = new List <Hl7.Fhir.Model.ImmunizationProfile.ImmunizationProfileRecommendationSupportingAdverseEventReportComponent>();
                    reader.EnterArray();

                    while (ParserUtils.IsAtArrayElement(reader, "supportingAdverseEventReport"))
                    {
                        result.SupportingAdverseEventReport.Add(ImmunizationProfileParser.ParseImmunizationProfileRecommendationSupportingAdverseEventReportComponent(reader, errors));
                    }

                    reader.LeaveArray();
                }

                // Parse element supportingPatientObservation
                else if (atName == "supportingPatientObservation")
                {
                    result.SupportingPatientObservation = new List <Hl7.Fhir.Model.ResourceReference>();
                    reader.EnterArray();

                    while (ParserUtils.IsAtArrayElement(reader, "supportingPatientObservation"))
                    {
                        result.SupportingPatientObservation.Add(ResourceReferenceParser.ParseResourceReference(reader, errors));
                    }

                    reader.LeaveArray();
                }

                else
                {
                    errors.Add(String.Format("Encountered unknown element {0} while parsing {1}", reader.CurrentElementName, currentElementName), reader);
                    reader.SkipSubElementsFor(currentElementName);
                    result = null;
                }
            }

            reader.LeaveElement();
            return(result);
        }