private JsonAdditionalPropertiesSerialization?CreateAdditionalProperties(ObjectSchema objectSchema, ObjectType objectType) { var inheritedDictionarySchema = objectSchema.Parents !.All.OfType <DictionarySchema>().FirstOrDefault(); ObjectTypeProperty?additionalPropertiesProperty = null; foreach (var obj in objectType.EnumerateHierarchy()) { additionalPropertiesProperty = obj.AdditionalPropertiesProperty; if (additionalPropertiesProperty != null) { break; } } if (inheritedDictionarySchema == null || additionalPropertiesProperty == null) { return(null); } var valueSerialization = BuildSerialization( inheritedDictionarySchema.ElementType, TypeFactory.GetElementType(additionalPropertiesProperty.Declaration.Type)); return(new JsonAdditionalPropertiesSerialization( additionalPropertiesProperty, valueSerialization, new CSharpType(typeof(Dictionary <,>), additionalPropertiesProperty.Declaration.Type.Arguments))); }
private XmlObjectSerialization BuildXmlObjectSerialization(ObjectSchema objectSchema, ObjectType objectType) { List <XmlObjectElementSerialization> elements = new List <XmlObjectElementSerialization>(); List <XmlObjectAttributeSerialization> attributes = new List <XmlObjectAttributeSerialization>(); List <XmlObjectArraySerialization> embeddedArrays = new List <XmlObjectArraySerialization>(); foreach (var objectTypeLevel in objectType.EnumerateHierarchy()) { foreach (ObjectTypeProperty objectProperty in objectTypeLevel.Properties) { var property = objectProperty.SchemaProperty; if (property == null) { continue; } var name = property.SerializedName; var isAttribute = property.Schema.Serialization?.Xml?.Attribute == true; if (isAttribute) { attributes.Add( new XmlObjectAttributeSerialization( name, objectProperty, BuildXmlValueSerialization(property.Schema, objectProperty.Declaration.Type) ) ); } else { XmlElementSerialization valueSerialization = BuildXmlElementSerialization(property.Schema, objectProperty.Declaration.Type, name, false); if (valueSerialization is XmlArraySerialization arraySerialization) { embeddedArrays.Add(new XmlObjectArraySerialization(objectProperty, arraySerialization)); } else { elements.Add( new XmlObjectElementSerialization( objectProperty, valueSerialization ) ); } } } } return(new XmlObjectSerialization( objectSchema.Serialization?.Xml?.Name ?? objectSchema.Language.Default.Name, objectType.Type, elements.ToArray(), attributes.ToArray(), embeddedArrays.ToArray() )); }
private JsonObjectSerialization BuildJsonObjectSerialization(ObjectSchema objectSchema, ObjectType objectType) { PropertyBag propertyBag = new PropertyBag(); foreach (var objectTypeLevel in objectType.EnumerateHierarchy()) { foreach (var objectTypeProperty in objectTypeLevel.Properties) { var schemaProperty = objectTypeProperty.SchemaProperty; if (schemaProperty != null) { propertyBag.Properties.Add(schemaProperty); } } } PopulatePropertyBag(propertyBag, 0); return(new JsonObjectSerialization( objectType.Type, GetPropertySerializationsFromBag(propertyBag, objectType).ToArray(), CreateAdditionalProperties(objectSchema, objectType))); }