/// <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 (Country != null)
            {
                writer.WritePropertyName("country");
                Country.SerializeJson(writer, options);
            }

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

                foreach (CodeableConcept valJurisdiction in Jurisdiction)
                {
                    valJurisdiction.SerializeJson(writer, options, true);
                }

                writer.WriteEndArray();
            }

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

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

            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();
            }
            if (!string.IsNullOrEmpty(ResourceType))
            {
                writer.WriteString("resourceType", (string)ResourceType !);
            }


            ((fhirCsR4.Models.DomainResource) 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 ((Subject != null) && (Subject.Count != 0))
            {
                writer.WritePropertyName("subject");
                writer.WriteStartArray();

                foreach (Reference valSubject in Subject)
                {
                    valSubject.SerializeJson(writer, options, true);
                }

                writer.WriteEndArray();
            }

            if (!string.IsNullOrEmpty(Description))
            {
                writer.WriteString("description", (string)Description !);
            }

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

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

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

                foreach (MarketingStatus valMarketingStatus in MarketingStatus)
                {
                    valMarketingStatus.SerializeJson(writer, options, true);
                }

                writer.WriteEndArray();
            }

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

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

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

                writer.WriteEndArray();
            }

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

                foreach (MedicinalProductPackagedBatchIdentifier valBatchIdentifier in BatchIdentifier)
                {
                    valBatchIdentifier.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 (includeStartObject)
            {
                writer.WriteEndObject();
            }
        }