/// <summary>
        /// Deserialize a JSON property
        /// </summary>
        public new void DeserializeJsonProperty(ref Utf8JsonReader reader, JsonSerializerOptions options, string propertyName)
        {
            switch (propertyName)
            {
            case "batchIdentifier":
                if ((reader.TokenType != JsonTokenType.StartArray) || (!reader.Read()))
                {
                    throw new JsonException();
                }

                BatchIdentifier = new List <MedicinalProductPackagedBatchIdentifier>();

                while (reader.TokenType != JsonTokenType.EndArray)
                {
                    Fhir.R4.Models.MedicinalProductPackagedBatchIdentifier objBatchIdentifier = new Fhir.R4.Models.MedicinalProductPackagedBatchIdentifier();
                    objBatchIdentifier.DeserializeJson(ref reader, options);
                    BatchIdentifier.Add(objBatchIdentifier);

                    if (!reader.Read())
                    {
                        throw new JsonException();
                    }
                }

                if (BatchIdentifier.Count == 0)
                {
                    BatchIdentifier = null;
                }

                break;

            case "description":
                Description = reader.GetString();
                break;

            case "_description":
                _Description = new Fhir.R4.Models.Element();
                _Description.DeserializeJson(ref reader, options);
                break;

            case "identifier":
                if ((reader.TokenType != JsonTokenType.StartArray) || (!reader.Read()))
                {
                    throw new JsonException();
                }

                Identifier = new List <Identifier>();

                while (reader.TokenType != JsonTokenType.EndArray)
                {
                    Fhir.R4.Models.Identifier objIdentifier = new Fhir.R4.Models.Identifier();
                    objIdentifier.DeserializeJson(ref reader, options);
                    Identifier.Add(objIdentifier);

                    if (!reader.Read())
                    {
                        throw new JsonException();
                    }
                }

                if (Identifier.Count == 0)
                {
                    Identifier = null;
                }

                break;

            case "legalStatusOfSupply":
                LegalStatusOfSupply = new Fhir.R4.Models.CodeableConcept();
                LegalStatusOfSupply.DeserializeJson(ref reader, options);
                break;

            case "manufacturer":
                if ((reader.TokenType != JsonTokenType.StartArray) || (!reader.Read()))
                {
                    throw new JsonException();
                }

                Manufacturer = new List <Reference>();

                while (reader.TokenType != JsonTokenType.EndArray)
                {
                    Fhir.R4.Models.Reference objManufacturer = new Fhir.R4.Models.Reference();
                    objManufacturer.DeserializeJson(ref reader, options);
                    Manufacturer.Add(objManufacturer);

                    if (!reader.Read())
                    {
                        throw new JsonException();
                    }
                }

                if (Manufacturer.Count == 0)
                {
                    Manufacturer = null;
                }

                break;

            case "marketingAuthorization":
                MarketingAuthorization = new Fhir.R4.Models.Reference();
                MarketingAuthorization.DeserializeJson(ref reader, options);
                break;

            case "marketingStatus":
                if ((reader.TokenType != JsonTokenType.StartArray) || (!reader.Read()))
                {
                    throw new JsonException();
                }

                MarketingStatus = new List <MarketingStatus>();

                while (reader.TokenType != JsonTokenType.EndArray)
                {
                    Fhir.R4.Models.MarketingStatus objMarketingStatus = new Fhir.R4.Models.MarketingStatus();
                    objMarketingStatus.DeserializeJson(ref reader, options);
                    MarketingStatus.Add(objMarketingStatus);

                    if (!reader.Read())
                    {
                        throw new JsonException();
                    }
                }

                if (MarketingStatus.Count == 0)
                {
                    MarketingStatus = null;
                }

                break;

            case "packageItem":
                if ((reader.TokenType != JsonTokenType.StartArray) || (!reader.Read()))
                {
                    throw new JsonException();
                }

                PackageItem = new List <MedicinalProductPackagedPackageItem>();

                while (reader.TokenType != JsonTokenType.EndArray)
                {
                    Fhir.R4.Models.MedicinalProductPackagedPackageItem objPackageItem = new Fhir.R4.Models.MedicinalProductPackagedPackageItem();
                    objPackageItem.DeserializeJson(ref reader, options);
                    PackageItem.Add(objPackageItem);

                    if (!reader.Read())
                    {
                        throw new JsonException();
                    }
                }

                if (PackageItem.Count == 0)
                {
                    PackageItem = null;
                }

                break;

            case "subject":
                if ((reader.TokenType != JsonTokenType.StartArray) || (!reader.Read()))
                {
                    throw new JsonException();
                }

                Subject = new List <Reference>();

                while (reader.TokenType != JsonTokenType.EndArray)
                {
                    Fhir.R4.Models.Reference objSubject = new Fhir.R4.Models.Reference();
                    objSubject.DeserializeJson(ref reader, options);
                    Subject.Add(objSubject);

                    if (!reader.Read())
                    {
                        throw new JsonException();
                    }
                }

                if (Subject.Count == 0)
                {
                    Subject = null;
                }

                break;

            default:
                ((Fhir.R4.Models.DomainResource) this).DeserializeJsonProperty(ref reader, options, propertyName);
                break;
            }
        }
        /// <summary>
        /// Deserialize a JSON property
        /// </summary>
        public new void DeserializeJsonProperty(ref Utf8JsonReader reader, JsonSerializerOptions options, string propertyName)
        {
            switch (propertyName)
            {
            case "alternateMaterial":
                if ((reader.TokenType != JsonTokenType.StartArray) || (!reader.Read()))
                {
                    throw new JsonException();
                }

                AlternateMaterial = new List <CodeableConcept>();

                while (reader.TokenType != JsonTokenType.EndArray)
                {
                    Fhir.R4.Models.CodeableConcept objAlternateMaterial = new Fhir.R4.Models.CodeableConcept();
                    objAlternateMaterial.DeserializeJson(ref reader, options);
                    AlternateMaterial.Add(objAlternateMaterial);

                    if (!reader.Read())
                    {
                        throw new JsonException();
                    }
                }

                if (AlternateMaterial.Count == 0)
                {
                    AlternateMaterial = null;
                }

                break;

            case "device":
                if ((reader.TokenType != JsonTokenType.StartArray) || (!reader.Read()))
                {
                    throw new JsonException();
                }

                Device = new List <Reference>();

                while (reader.TokenType != JsonTokenType.EndArray)
                {
                    Fhir.R4.Models.Reference objDevice = new Fhir.R4.Models.Reference();
                    objDevice.DeserializeJson(ref reader, options);
                    Device.Add(objDevice);

                    if (!reader.Read())
                    {
                        throw new JsonException();
                    }
                }

                if (Device.Count == 0)
                {
                    Device = null;
                }

                break;

            case "identifier":
                if ((reader.TokenType != JsonTokenType.StartArray) || (!reader.Read()))
                {
                    throw new JsonException();
                }

                Identifier = new List <Identifier>();

                while (reader.TokenType != JsonTokenType.EndArray)
                {
                    Fhir.R4.Models.Identifier objIdentifier = new Fhir.R4.Models.Identifier();
                    objIdentifier.DeserializeJson(ref reader, options);
                    Identifier.Add(objIdentifier);

                    if (!reader.Read())
                    {
                        throw new JsonException();
                    }
                }

                if (Identifier.Count == 0)
                {
                    Identifier = null;
                }

                break;

            case "manufacturedItem":
                if ((reader.TokenType != JsonTokenType.StartArray) || (!reader.Read()))
                {
                    throw new JsonException();
                }

                ManufacturedItem = new List <Reference>();

                while (reader.TokenType != JsonTokenType.EndArray)
                {
                    Fhir.R4.Models.Reference objManufacturedItem = new Fhir.R4.Models.Reference();
                    objManufacturedItem.DeserializeJson(ref reader, options);
                    ManufacturedItem.Add(objManufacturedItem);

                    if (!reader.Read())
                    {
                        throw new JsonException();
                    }
                }

                if (ManufacturedItem.Count == 0)
                {
                    ManufacturedItem = null;
                }

                break;

            case "manufacturer":
                if ((reader.TokenType != JsonTokenType.StartArray) || (!reader.Read()))
                {
                    throw new JsonException();
                }

                Manufacturer = new List <Reference>();

                while (reader.TokenType != JsonTokenType.EndArray)
                {
                    Fhir.R4.Models.Reference objManufacturer = new Fhir.R4.Models.Reference();
                    objManufacturer.DeserializeJson(ref reader, options);
                    Manufacturer.Add(objManufacturer);

                    if (!reader.Read())
                    {
                        throw new JsonException();
                    }
                }

                if (Manufacturer.Count == 0)
                {
                    Manufacturer = null;
                }

                break;

            case "material":
                if ((reader.TokenType != JsonTokenType.StartArray) || (!reader.Read()))
                {
                    throw new JsonException();
                }

                Material = new List <CodeableConcept>();

                while (reader.TokenType != JsonTokenType.EndArray)
                {
                    Fhir.R4.Models.CodeableConcept objMaterial = new Fhir.R4.Models.CodeableConcept();
                    objMaterial.DeserializeJson(ref reader, options);
                    Material.Add(objMaterial);

                    if (!reader.Read())
                    {
                        throw new JsonException();
                    }
                }

                if (Material.Count == 0)
                {
                    Material = null;
                }

                break;

            case "otherCharacteristics":
                if ((reader.TokenType != JsonTokenType.StartArray) || (!reader.Read()))
                {
                    throw new JsonException();
                }

                OtherCharacteristics = new List <CodeableConcept>();

                while (reader.TokenType != JsonTokenType.EndArray)
                {
                    Fhir.R4.Models.CodeableConcept objOtherCharacteristics = new Fhir.R4.Models.CodeableConcept();
                    objOtherCharacteristics.DeserializeJson(ref reader, options);
                    OtherCharacteristics.Add(objOtherCharacteristics);

                    if (!reader.Read())
                    {
                        throw new JsonException();
                    }
                }

                if (OtherCharacteristics.Count == 0)
                {
                    OtherCharacteristics = null;
                }

                break;

            case "packageItem":
                if ((reader.TokenType != JsonTokenType.StartArray) || (!reader.Read()))
                {
                    throw new JsonException();
                }

                PackageItem = new List <MedicinalProductPackagedPackageItem>();

                while (reader.TokenType != JsonTokenType.EndArray)
                {
                    Fhir.R4.Models.MedicinalProductPackagedPackageItem objPackageItem = new Fhir.R4.Models.MedicinalProductPackagedPackageItem();
                    objPackageItem.DeserializeJson(ref reader, options);
                    PackageItem.Add(objPackageItem);

                    if (!reader.Read())
                    {
                        throw new JsonException();
                    }
                }

                if (PackageItem.Count == 0)
                {
                    PackageItem = null;
                }

                break;

            case "physicalCharacteristics":
                PhysicalCharacteristics = new Fhir.R4.Models.ProdCharacteristic();
                PhysicalCharacteristics.DeserializeJson(ref reader, options);
                break;

            case "quantity":
                Quantity = new Fhir.R4.Models.Quantity();
                Quantity.DeserializeJson(ref reader, options);
                break;

            case "shelfLifeStorage":
                if ((reader.TokenType != JsonTokenType.StartArray) || (!reader.Read()))
                {
                    throw new JsonException();
                }

                ShelfLifeStorage = new List <ProductShelfLife>();

                while (reader.TokenType != JsonTokenType.EndArray)
                {
                    Fhir.R4.Models.ProductShelfLife objShelfLifeStorage = new Fhir.R4.Models.ProductShelfLife();
                    objShelfLifeStorage.DeserializeJson(ref reader, options);
                    ShelfLifeStorage.Add(objShelfLifeStorage);

                    if (!reader.Read())
                    {
                        throw new JsonException();
                    }
                }

                if (ShelfLifeStorage.Count == 0)
                {
                    ShelfLifeStorage = null;
                }

                break;

            case "type":
                Type = new Fhir.R4.Models.CodeableConcept();
                Type.DeserializeJson(ref reader, options);
                break;

            default:
                ((Fhir.R4.Models.BackboneElement) this).DeserializeJsonProperty(ref reader, options, propertyName);
                break;
            }
        }