Пример #1
0
        /// <summary>
        /// Deserialize JSON into a FHIR DataRequirement
        /// </summary>
        public static void DeserializeJson(this DataRequirement current, ref Utf8JsonReader reader, JsonSerializerOptions options)
        {
            string propertyName;

            while (reader.Read())
            {
                if (reader.TokenType == JsonTokenType.EndObject)
                {
                    return;
                }

                if (reader.TokenType == JsonTokenType.PropertyName)
                {
                    propertyName = reader.GetString();
                    if (Hl7.Fhir.Serialization.FhirSerializerOptions.Debug)
                    {
                        Console.WriteLine($"DataRequirement >>> DataRequirement.{propertyName}, depth: {reader.CurrentDepth}, pos: {reader.BytesConsumed}");
                    }
                    reader.Read();
                    current.DeserializeJsonProperty(ref reader, options, propertyName);
                }
            }

            throw new JsonException($"DataRequirement: invalid state! depth: {reader.CurrentDepth}, pos: {reader.BytesConsumed}");
        }
Пример #2
0
        /// <summary>
        /// Serialize a FHIR DataRequirement into JSON
        /// </summary>
        public static void SerializeJson(this DataRequirement current, Utf8JsonWriter writer, JsonSerializerOptions options, bool includeStartObject = true)
        {
            if (includeStartObject)
            {
                writer.WriteStartObject();
            }
            // Complex: DataRequirement, Export: DataRequirement, Base: Element (Element)
            ((Hl7.Fhir.Model.Element)current).SerializeJson(writer, options, false);

            writer.WriteString("type", Hl7.Fhir.Utility.EnumUtility.GetLiteral(current.TypeElement.Value));

            if ((current.ProfileElement != null) && (current.ProfileElement.Count != 0))
            {
                int valueCount     = 0;
                int extensionCount = 0;
                foreach (Canonical val in current.ProfileElement)
                {
                    if (!string.IsNullOrEmpty(val.Value))
                    {
                        valueCount++;
                    }
                    if (val.HasExtensions())
                    {
                        extensionCount++;
                    }
                }

                if (valueCount > 0)
                {
                    writer.WritePropertyName("profile");
                    writer.WriteStartArray();
                    foreach (Canonical val in current.ProfileElement)
                    {
                        if (string.IsNullOrEmpty(val.Value))
                        {
                            writer.WriteNullValue();
                        }
                        else
                        {
                            writer.WriteStringValue(val.Value);
                        }
                    }

                    writer.WriteEndArray();
                }

                if (extensionCount > 0)
                {
                    writer.WritePropertyName("_profile");
                    writer.WriteStartArray();
                    foreach (Canonical val in current.ProfileElement)
                    {
                        if (val.HasExtensions() || (!string.IsNullOrEmpty(val.ElementId)))
                        {
                            JsonStreamUtilities.SerializeExtensionList(writer, options, string.Empty, true, val.Extension, val.ElementId);
                        }
                        else
                        {
                            writer.WriteNullValue();
                        }
                    }

                    writer.WriteEndArray();
                }
            }

            if (current.Subject != null)
            {
                switch (current.Subject)
                {
                case CodeableConcept v_CodeableConcept:
                    writer.WritePropertyName("subjectCodeableConcept");
                    v_CodeableConcept.SerializeJson(writer, options);
                    break;

                case ResourceReference v_ResourceReference:
                    writer.WritePropertyName("subjectReference");
                    v_ResourceReference.SerializeJson(writer, options);
                    break;
                }
            }
            if ((current.MustSupportElement != null) && (current.MustSupportElement.Count != 0))
            {
                int valueCount     = 0;
                int extensionCount = 0;
                foreach (FhirString val in current.MustSupportElement)
                {
                    if (!string.IsNullOrEmpty(val.Value))
                    {
                        valueCount++;
                    }
                    if (val.HasExtensions())
                    {
                        extensionCount++;
                    }
                }

                if (valueCount > 0)
                {
                    writer.WritePropertyName("mustSupport");
                    writer.WriteStartArray();
                    foreach (FhirString val in current.MustSupportElement)
                    {
                        if (string.IsNullOrEmpty(val.Value))
                        {
                            writer.WriteNullValue();
                        }
                        else
                        {
                            writer.WriteStringValue(val.Value);
                        }
                    }

                    writer.WriteEndArray();
                }

                if (extensionCount > 0)
                {
                    writer.WritePropertyName("_mustSupport");
                    writer.WriteStartArray();
                    foreach (FhirString val in current.MustSupportElement)
                    {
                        if (val.HasExtensions() || (!string.IsNullOrEmpty(val.ElementId)))
                        {
                            JsonStreamUtilities.SerializeExtensionList(writer, options, string.Empty, true, val.Extension, val.ElementId);
                        }
                        else
                        {
                            writer.WriteNullValue();
                        }
                    }

                    writer.WriteEndArray();
                }
            }

            if ((current.CodeFilter != null) && (current.CodeFilter.Count != 0))
            {
                writer.WritePropertyName("codeFilter");
                writer.WriteStartArray();
                foreach (DataRequirement.CodeFilterComponent val in current.CodeFilter)
                {
                    val.SerializeJson(writer, options, true);
                }
                writer.WriteEndArray();
            }

            if ((current.DateFilter != null) && (current.DateFilter.Count != 0))
            {
                writer.WritePropertyName("dateFilter");
                writer.WriteStartArray();
                foreach (DataRequirement.DateFilterComponent val in current.DateFilter)
                {
                    val.SerializeJson(writer, options, true);
                }
                writer.WriteEndArray();
            }

            if (current.LimitElement != null)
            {
                if (current.LimitElement.Value != null)
                {
                    writer.WriteNumber("limit", (int)current.LimitElement.Value);
                }
                if (current.LimitElement.HasExtensions() || (!string.IsNullOrEmpty(current.LimitElement.ElementId)))
                {
                    JsonStreamUtilities.SerializeExtensionList(writer, options, "_limit", false, current.LimitElement.Extension, current.LimitElement.ElementId);
                }
            }

            if ((current.Sort != null) && (current.Sort.Count != 0))
            {
                writer.WritePropertyName("sort");
                writer.WriteStartArray();
                foreach (DataRequirement.SortComponent val in current.Sort)
                {
                    val.SerializeJson(writer, options, true);
                }
                writer.WriteEndArray();
            }

            if (includeStartObject)
            {
                writer.WriteEndObject();
            }
        }
Пример #3
0
        /// <summary>
        /// Deserialize JSON into a FHIR DataRequirement
        /// </summary>
        public static void DeserializeJsonProperty(this DataRequirement current, ref Utf8JsonReader reader, JsonSerializerOptions options, string propertyName)
        {
            switch (propertyName)
            {
            case "type":
                if (reader.TokenType == JsonTokenType.Null)
                {
                    current.TypeElement = new Code <Hl7.Fhir.Model.FHIRAllTypes>();
                    reader.Skip();
                }
                else
                {
                    current.TypeElement = new Code <Hl7.Fhir.Model.FHIRAllTypes>(Hl7.Fhir.Utility.EnumUtility.ParseLiteral <Hl7.Fhir.Model.FHIRAllTypes>(reader.GetString()));
                }
                break;

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

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

                current.ProfileElement = new List <Canonical>();

                while (reader.TokenType != JsonTokenType.EndArray)
                {
                    if (reader.TokenType == JsonTokenType.Null)
                    {
                        current.ProfileElement.Add(new Canonical());
                        reader.Skip();
                    }
                    else
                    {
                        current.ProfileElement.Add(new Canonical(reader.GetString()));
                    }

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

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

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

                int i_profile = 0;

                while (reader.TokenType != JsonTokenType.EndArray)
                {
                    if (i_profile >= current.ProfileElement.Count)
                    {
                        current.ProfileElement.Add(new Canonical());
                    }
                    if (reader.TokenType == JsonTokenType.Null)
                    {
                        reader.Skip();
                    }
                    else
                    {
                        ((Hl7.Fhir.Model.Element)current.ProfileElement[i_profile++]).DeserializeJson(ref reader, options);
                    }

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

            case "subjectCodeableConcept":
                current.Subject = new Hl7.Fhir.Model.CodeableConcept();
                ((Hl7.Fhir.Model.CodeableConcept)current.Subject).DeserializeJson(ref reader, options);
                break;

            case "subjectReference":
                current.Subject = new Hl7.Fhir.Model.ResourceReference();
                ((Hl7.Fhir.Model.ResourceReference)current.Subject).DeserializeJson(ref reader, options);
                break;

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

                current.MustSupportElement = new List <FhirString>();

                while (reader.TokenType != JsonTokenType.EndArray)
                {
                    if (reader.TokenType == JsonTokenType.Null)
                    {
                        current.MustSupportElement.Add(new FhirString());
                        reader.Skip();
                    }
                    else
                    {
                        current.MustSupportElement.Add(new FhirString(reader.GetString()));
                    }

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

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

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

                int i_mustSupport = 0;

                while (reader.TokenType != JsonTokenType.EndArray)
                {
                    if (i_mustSupport >= current.MustSupportElement.Count)
                    {
                        current.MustSupportElement.Add(new FhirString());
                    }
                    if (reader.TokenType == JsonTokenType.Null)
                    {
                        reader.Skip();
                    }
                    else
                    {
                        ((Hl7.Fhir.Model.Element)current.MustSupportElement[i_mustSupport++]).DeserializeJson(ref reader, options);
                    }

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

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

                current.CodeFilter = new List <DataRequirement.CodeFilterComponent>();

                while (reader.TokenType != JsonTokenType.EndArray)
                {
                    Hl7.Fhir.Model.DataRequirement.CodeFilterComponent v_CodeFilter = new Hl7.Fhir.Model.DataRequirement.CodeFilterComponent();
                    v_CodeFilter.DeserializeJson(ref reader, options);
                    current.CodeFilter.Add(v_CodeFilter);

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

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

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

                current.DateFilter = new List <DataRequirement.DateFilterComponent>();

                while (reader.TokenType != JsonTokenType.EndArray)
                {
                    Hl7.Fhir.Model.DataRequirement.DateFilterComponent v_DateFilter = new Hl7.Fhir.Model.DataRequirement.DateFilterComponent();
                    v_DateFilter.DeserializeJson(ref reader, options);
                    current.DateFilter.Add(v_DateFilter);

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

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

            case "limit":
                if (reader.TokenType == JsonTokenType.Null)
                {
                    current.LimitElement = new PositiveInt();
                    reader.Skip();
                }
                else
                {
                    current.LimitElement = new PositiveInt(reader.GetInt32());
                }
                break;

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

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

                current.Sort = new List <DataRequirement.SortComponent>();

                while (reader.TokenType != JsonTokenType.EndArray)
                {
                    Hl7.Fhir.Model.DataRequirement.SortComponent v_Sort = new Hl7.Fhir.Model.DataRequirement.SortComponent();
                    v_Sort.DeserializeJson(ref reader, options);
                    current.Sort.Add(v_Sort);

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

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

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