/// <summary>
        /// Serialize to a JSON object
        /// </summary>
        public new void SerializeJson(Utf8JsonWriter writer, JsonSerializerOptions options, bool includeStartObject = true)
        {
            if (includeStartObject)
            {
                writer.WriteStartObject();
            }

            ((Fhir.R4.Models.BackboneElement) this).SerializeJson(writer, options, false);

            if ((SupportingInfoSequence != null) && (SupportingInfoSequence.Count != 0))
            {
                writer.WritePropertyName("supportingInfoSequence");
                writer.WriteStartArray();

                foreach (uint valSupportingInfoSequence in SupportingInfoSequence)
                {
                    writer.WriteNumberValue(valSupportingInfoSequence);
                }

                writer.WriteEndArray();
            }

            if (Category != null)
            {
                writer.WritePropertyName("category");
                Category.SerializeJson(writer, options);
            }

            if (ProductOrService != null)
            {
                writer.WritePropertyName("productOrService");
                ProductOrService.SerializeJson(writer, options);
            }

            if ((Modifier != null) && (Modifier.Count != 0))
            {
                writer.WritePropertyName("modifier");
                writer.WriteStartArray();

                foreach (CodeableConcept valModifier in Modifier)
                {
                    valModifier.SerializeJson(writer, options, true);
                }

                writer.WriteEndArray();
            }

            if (Provider != null)
            {
                writer.WritePropertyName("provider");
                Provider.SerializeJson(writer, options);
            }

            if (Quantity != null)
            {
                writer.WritePropertyName("quantity");
                Quantity.SerializeJson(writer, options);
            }

            if (UnitPrice != null)
            {
                writer.WritePropertyName("unitPrice");
                UnitPrice.SerializeJson(writer, options);
            }

            if (Facility != null)
            {
                writer.WritePropertyName("facility");
                Facility.SerializeJson(writer, options);
            }

            if ((Diagnosis != null) && (Diagnosis.Count != 0))
            {
                writer.WritePropertyName("diagnosis");
                writer.WriteStartArray();

                foreach (CoverageEligibilityRequestItemDiagnosis valDiagnosis in Diagnosis)
                {
                    valDiagnosis.SerializeJson(writer, options, true);
                }

                writer.WriteEndArray();
            }

            if ((Detail != null) && (Detail.Count != 0))
            {
                writer.WritePropertyName("detail");
                writer.WriteStartArray();

                foreach (Reference valDetail in Detail)
                {
                    valDetail.SerializeJson(writer, options, true);
                }

                writer.WriteEndArray();
            }

            if (includeStartObject)
            {
                writer.WriteEndObject();
            }
        }
        /// <summary>
        /// Serialize to a JSON object
        /// </summary>
        public new void SerializeJson(Utf8JsonWriter writer, JsonSerializerOptions options, bool includeStartObject = true)
        {
            if (includeStartObject)
            {
                writer.WriteStartObject();
            }

            ((Fhir.R4.Models.BackboneElement) this).SerializeJson(writer, options, false);

            if ((Identifier != null) && (Identifier.Count != 0))
            {
                writer.WritePropertyName("identifier");
                writer.WriteStartArray();

                foreach (Identifier valIdentifier in Identifier)
                {
                    valIdentifier.SerializeJson(writer, options, true);
                }

                writer.WriteEndArray();
            }

            if (Type != null)
            {
                writer.WritePropertyName("type");
                Type.SerializeJson(writer, options);
            }

            if (Quantity != null)
            {
                writer.WritePropertyName("quantity");
                Quantity.SerializeJson(writer, options);
            }

            if ((Material != null) && (Material.Count != 0))
            {
                writer.WritePropertyName("material");
                writer.WriteStartArray();

                foreach (CodeableConcept valMaterial in Material)
                {
                    valMaterial.SerializeJson(writer, options, true);
                }

                writer.WriteEndArray();
            }

            if ((AlternateMaterial != null) && (AlternateMaterial.Count != 0))
            {
                writer.WritePropertyName("alternateMaterial");
                writer.WriteStartArray();

                foreach (CodeableConcept valAlternateMaterial in AlternateMaterial)
                {
                    valAlternateMaterial.SerializeJson(writer, options, true);
                }

                writer.WriteEndArray();
            }

            if ((Device != null) && (Device.Count != 0))
            {
                writer.WritePropertyName("device");
                writer.WriteStartArray();

                foreach (Reference valDevice in Device)
                {
                    valDevice.SerializeJson(writer, options, true);
                }

                writer.WriteEndArray();
            }

            if ((ManufacturedItem != null) && (ManufacturedItem.Count != 0))
            {
                writer.WritePropertyName("manufacturedItem");
                writer.WriteStartArray();

                foreach (Reference valManufacturedItem in ManufacturedItem)
                {
                    valManufacturedItem.SerializeJson(writer, options, true);
                }

                writer.WriteEndArray();
            }

            if ((PackageItem != null) && (PackageItem.Count != 0))
            {
                writer.WritePropertyName("packageItem");
                writer.WriteStartArray();

                foreach (MedicinalProductPackagedPackageItem valPackageItem in PackageItem)
                {
                    valPackageItem.SerializeJson(writer, options, true);
                }

                writer.WriteEndArray();
            }

            if (PhysicalCharacteristics != null)
            {
                writer.WritePropertyName("physicalCharacteristics");
                PhysicalCharacteristics.SerializeJson(writer, options);
            }

            if ((OtherCharacteristics != null) && (OtherCharacteristics.Count != 0))
            {
                writer.WritePropertyName("otherCharacteristics");
                writer.WriteStartArray();

                foreach (CodeableConcept valOtherCharacteristics in OtherCharacteristics)
                {
                    valOtherCharacteristics.SerializeJson(writer, options, true);
                }

                writer.WriteEndArray();
            }

            if ((ShelfLifeStorage != null) && (ShelfLifeStorage.Count != 0))
            {
                writer.WritePropertyName("shelfLifeStorage");
                writer.WriteStartArray();

                foreach (ProductShelfLife valShelfLifeStorage in ShelfLifeStorage)
                {
                    valShelfLifeStorage.SerializeJson(writer, options, true);
                }

                writer.WriteEndArray();
            }

            if ((Manufacturer != null) && (Manufacturer.Count != 0))
            {
                writer.WritePropertyName("manufacturer");
                writer.WriteStartArray();

                foreach (Reference valManufacturer in Manufacturer)
                {
                    valManufacturer.SerializeJson(writer, options, true);
                }

                writer.WriteEndArray();
            }

            if (includeStartObject)
            {
                writer.WriteEndObject();
            }
        }