/// <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}"); }
/// <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(); } }
/// <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; } }