Exemplo n.º 1
0
        /// <summary>
        /// Deserialize JSON into a FHIR Bundle
        /// </summary>
        public static void DeserializeJsonProperty(this Bundle 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 "type":
                if (reader.TokenType == JsonTokenType.Null)
                {
                    current.TypeElement = new Code <Hl7.Fhir.Model.Bundle.BundleType>();
                    reader.Skip();
                }
                else
                {
                    current.TypeElement = new Code <Hl7.Fhir.Model.Bundle.BundleType>(Hl7.Fhir.Utility.EnumUtility.ParseLiteral <Hl7.Fhir.Model.Bundle.BundleType>(reader.GetString()));
                }
                break;

            case "_type":
                if (current.TypeElement == null)
                {
                    current.TypeElement = new Code <Hl7.Fhir.Model.Bundle.BundleType>();
                }
                ((Hl7.Fhir.Model.Element)current.TypeElement).DeserializeJson(ref reader, options);
                break;

            case "timestamp":
                if (reader.TokenType == JsonTokenType.Null)
                {
                    current.TimestampElement = new Instant();
                    reader.Skip();
                }
                else
                {
                    current.TimestampElement = new Instant(DateTimeOffset.Parse(reader.GetString()));
                }
                break;

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

            case "total":
                if (reader.TokenType == JsonTokenType.Null)
                {
                    current.TotalElement = new UnsignedInt();
                    reader.Skip();
                }
                else
                {
                    current.TotalElement = new UnsignedInt(reader.GetInt32());
                }
                break;

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

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

                current.Link = new List <Bundle.LinkComponent>();

                while (reader.TokenType != JsonTokenType.EndArray)
                {
                    Hl7.Fhir.Model.Bundle.LinkComponent v_Link = new Hl7.Fhir.Model.Bundle.LinkComponent();
                    v_Link.DeserializeJson(ref reader, options);
                    current.Link.Add(v_Link);

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

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

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

                current.Entry = new List <Bundle.EntryComponent>();

                while (reader.TokenType != JsonTokenType.EndArray)
                {
                    Hl7.Fhir.Model.Bundle.EntryComponent v_Entry = new Hl7.Fhir.Model.Bundle.EntryComponent();
                    v_Entry.DeserializeJson(ref reader, options);
                    current.Entry.Add(v_Entry);

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

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

            case "signature":
                current.Signature = new Hl7.Fhir.Model.Signature();
                ((Hl7.Fhir.Model.Signature)current.Signature).DeserializeJson(ref reader, options);
                break;

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