private IEnumerable <JsonPropertySerialization> GetPropertySerializationsFromBag(PropertyBag propertyBag, ObjectType objectType) { foreach (Property property in propertyBag.Properties) { var objectProperty = objectType.GetPropertyForSchemaProperty(property, includeParents: true); yield return(new JsonPropertySerialization( property.SerializedName, objectProperty, BuildSerialization(property.Schema, objectProperty.Declaration.Type) )); } foreach ((string name, PropertyBag innerBag) in propertyBag.Bag) { JsonPropertySerialization[] serializationProperties = GetPropertySerializationsFromBag(innerBag, objectType).ToArray(); JsonObjectSerialization objectSerialization = new JsonObjectSerialization(null, serializationProperties, null); yield return(new JsonPropertySerialization(name, null, objectSerialization)); } }
/// Collects a list of properties being read from all level of object hierarchy private static void CollectProperties(Dictionary <ObjectTypeProperty, CodeWriterDeclaration> propertyVariables, JsonObjectSerialization obj) { foreach (JsonPropertySerialization jsonProperty in obj.Properties) { ObjectTypeProperty?objectProperty = jsonProperty.Property; if (objectProperty != null) { var propertyDeclaration = new CodeWriterDeclaration(jsonProperty.Name.ToVariableName()); propertyVariables.Add(objectProperty, propertyDeclaration); } else if (jsonProperty.ValueSerialization is JsonObjectSerialization objectSerialization) { CollectProperties(propertyVariables, objectSerialization); } } var additionalPropertiesProperty = obj.AdditionalProperties?.Property; if (additionalPropertiesProperty != null) { var propertyDeclaration = new CodeWriterDeclaration(additionalPropertiesProperty.Declaration.Name.ToVariableName()); propertyVariables.Add(additionalPropertiesProperty, propertyDeclaration); } }