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));
            }
        }
Example #2
0
        /// 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);
            }
        }