// <auto-generated/>

//------------------------------------------------------------------------------------------------
//      This file has been programatically generated; DON´T EDIT!
//------------------------------------------------------------------------------------------------

#pragma warning disable SA1001
#pragma warning disable SA1027
#pragma warning disable SA1028
#pragma warning disable SA1121
#pragma warning disable SA1205
#pragma warning disable SA1309
#pragma warning disable SA1402
#pragma warning disable SA1505
#pragma warning disable SA1507
#pragma warning disable SA1508
#pragma warning disable SA1652

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Numerics;
using System.Text.Json;

namespace SharpGLTF.Schema2.Tiles3D
{
	using Collections;

	/// <summary>
	/// The element type.
	/// </summary>
	public enum ElementType
	{
		SCALAR,
		VEC2,
		VEC3,
		VEC4,
		MAT2,
		MAT3,
		MAT4,
		STRING,
		BOOLEAN,
		ENUM,
	}


	/// <summary>
	/// The datatype of the element's components. Only applicable to `SCALAR`, `VECN`, and `MATN` types.
	/// </summary>
	public enum DataType
	{
		INT8,
		UINT8,
		INT16,
		UINT16,
		INT32,
		UINT32,
		INT64,
		UINT64,
		FLOAT32,
		FLOAT64,
	}


	/// <summary>
	/// The type of the integer enum value.
	/// </summary>
	public enum IntegerType
	{
		INT8,
		UINT8,
		INT16,
		UINT16,
		INT32,
		UINT32,
		INT64,
		UINT64,
	}


	/// <summary>
	/// The type of values in `stringOffsets`.
	/// </summary>
	public enum ArrayOffsetType
	{
		UINT8,
		UINT16,
		UINT32,
		UINT64,
	}


	/// <summary>
	/// A class property.
	/// </summary>
	#if NET6_0_OR_GREATER
	[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors)]
	#endif
	[global::System.CodeDom.Compiler.GeneratedCodeAttribute("SharpGLTF.CodeGen", "1.0.0.0")]
	partial class StructuralMetadataClassProperty : ExtraProperties
	{
	
		private static readonly Boolean _arrayDefault = false;
		private Boolean? _array = _arrayDefault;
		
		private DataType? _componentType;
		
		private const Int32 _countMinimum = 2;
		private Int32? _count;
		
		private System.Text.Json.Nodes.JsonNode _default;
		
		private String _description;
		
		private String _enumType;
		
		private System.Text.Json.Nodes.JsonNode _max;
		
		private System.Text.Json.Nodes.JsonNode _min;
		
		private String _name;
		
		private System.Text.Json.Nodes.JsonNode _noData;
		
		private static readonly Boolean _normalizedDefault = false;
		private Boolean? _normalized = _normalizedDefault;
		
		private System.Text.Json.Nodes.JsonNode _offset;
		
		private static readonly Boolean _requiredDefault = false;
		private Boolean? _required = _requiredDefault;
		
		private System.Text.Json.Nodes.JsonNode _scale;
		
		private String _semantic;
		
		private ElementType _type;
		
	
		protected override void SerializeProperties(Utf8JsonWriter writer)
		{
			base.SerializeProperties(writer);
			SerializeProperty(writer, "array", _array, _arrayDefault);
			SerializePropertyEnumSymbol<DataType>(writer, "componentType", _componentType);
			SerializeProperty(writer, "count", _count);
			SerializeProperty(writer, "default", _default);
			SerializeProperty(writer, "description", _description);
			SerializeProperty(writer, "enumType", _enumType);
			SerializeProperty(writer, "max", _max);
			SerializeProperty(writer, "min", _min);
			SerializeProperty(writer, "name", _name);
			SerializeProperty(writer, "noData", _noData);
			SerializeProperty(writer, "normalized", _normalized, _normalizedDefault);
			SerializeProperty(writer, "offset", _offset);
			SerializeProperty(writer, "required", _required, _requiredDefault);
			SerializeProperty(writer, "scale", _scale);
			SerializeProperty(writer, "semantic", _semantic);
			SerializePropertyEnumSymbol<ElementType>(writer, "type", _type);
		}
	
		protected override void DeserializeProperty(string jsonPropertyName, ref Utf8JsonReader reader)
		{
			switch (jsonPropertyName)
			{
				case "array": _array = DeserializePropertyValue<Boolean?>(ref reader); break;
				case "componentType": _componentType = DeserializePropertyValue<DataType>(ref reader); break;
				case "count": _count = DeserializePropertyValue<Int32?>(ref reader); break;
				case "default": _default = DeserializePropertyValue<System.Text.Json.Nodes.JsonNode>(ref reader); break;
				case "description": _description = DeserializePropertyValue<String>(ref reader); break;
				case "enumType": _enumType = DeserializePropertyValue<String>(ref reader); break;
				case "max": _max = DeserializePropertyValue<System.Text.Json.Nodes.JsonNode>(ref reader); break;
				case "min": _min = DeserializePropertyValue<System.Text.Json.Nodes.JsonNode>(ref reader); break;
				case "name": _name = DeserializePropertyValue<String>(ref reader); break;
				case "noData": _noData = DeserializePropertyValue<System.Text.Json.Nodes.JsonNode>(ref reader); break;
				case "normalized": _normalized = DeserializePropertyValue<Boolean?>(ref reader); break;
				case "offset": _offset = DeserializePropertyValue<System.Text.Json.Nodes.JsonNode>(ref reader); break;
				case "required": _required = DeserializePropertyValue<Boolean?>(ref reader); break;
				case "scale": _scale = DeserializePropertyValue<System.Text.Json.Nodes.JsonNode>(ref reader); break;
				case "semantic": _semantic = DeserializePropertyValue<String>(ref reader); break;
				case "type": _type = DeserializePropertyValue<ElementType>(ref reader); break;
				default: base.DeserializeProperty(jsonPropertyName,ref reader); break;
			}
		}
	
	}

	/// <summary>
	/// A class containing a set of properties.
	/// </summary>
	#if NET6_0_OR_GREATER
	[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors)]
	#endif
	[global::System.CodeDom.Compiler.GeneratedCodeAttribute("SharpGLTF.CodeGen", "1.0.0.0")]
	partial class StructuralMetadataClass : ExtraProperties
	{
	
		private String _description;
		
		private String _name;
		
		private ChildrenDictionary<StructuralMetadataClassProperty,StructuralMetadataClass> _properties;
		
	
		protected override void SerializeProperties(Utf8JsonWriter writer)
		{
			base.SerializeProperties(writer);
			SerializeProperty(writer, "description", _description);
			SerializeProperty(writer, "name", _name);
			SerializeProperty(writer, "properties", _properties);
		}
	
		protected override void DeserializeProperty(string jsonPropertyName, ref Utf8JsonReader reader)
		{
			switch (jsonPropertyName)
			{
				case "description": _description = DeserializePropertyValue<String>(ref reader); break;
				case "name": _name = DeserializePropertyValue<String>(ref reader); break;
				case "properties": DeserializePropertyDictionary<StructuralMetadataClassProperty>(ref reader, _properties); break;
				default: base.DeserializeProperty(jsonPropertyName,ref reader); break;
			}
		}
	
	}

	/// <summary>
	/// An enum value.
	/// </summary>
	#if NET6_0_OR_GREATER
	[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors)]
	#endif
	[global::System.CodeDom.Compiler.GeneratedCodeAttribute("SharpGLTF.CodeGen", "1.0.0.0")]
	partial class StructuralMetadataEnumValue : ExtraProperties
	{
	
		private String _description;
		
		private String _name;
		
		private Int32 _value;
		
	
		protected override void SerializeProperties(Utf8JsonWriter writer)
		{
			base.SerializeProperties(writer);
			SerializeProperty(writer, "description", _description);
			SerializeProperty(writer, "name", _name);
			SerializeProperty(writer, "value", _value);
		}
	
		protected override void DeserializeProperty(string jsonPropertyName, ref Utf8JsonReader reader)
		{
			switch (jsonPropertyName)
			{
				case "description": _description = DeserializePropertyValue<String>(ref reader); break;
				case "name": _name = DeserializePropertyValue<String>(ref reader); break;
				case "value": _value = DeserializePropertyValue<Int32>(ref reader); break;
				default: base.DeserializeProperty(jsonPropertyName,ref reader); break;
			}
		}
	
	}

	/// <summary>
	/// An object defining the values of an enum.
	/// </summary>
	#if NET6_0_OR_GREATER
	[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors)]
	#endif
	[global::System.CodeDom.Compiler.GeneratedCodeAttribute("SharpGLTF.CodeGen", "1.0.0.0")]
	partial class StructuralMetadataEnum : ExtraProperties
	{
	
		private String _description;
		
		private String _name;
		
		private const IntegerType _valueTypeDefault = IntegerType.UINT16;
		private IntegerType? _valueType = _valueTypeDefault;
		
		private const int _valuesMinItems = 1;
		private ChildrenList<StructuralMetadataEnumValue,StructuralMetadataEnum> _values;
		
	
		protected override void SerializeProperties(Utf8JsonWriter writer)
		{
			base.SerializeProperties(writer);
			SerializeProperty(writer, "description", _description);
			SerializeProperty(writer, "name", _name);
			SerializePropertyEnumSymbol<IntegerType>(writer, "valueType", _valueType, _valueTypeDefault);
			SerializeProperty(writer, "values", _values, _valuesMinItems);
		}
	
		protected override void DeserializeProperty(string jsonPropertyName, ref Utf8JsonReader reader)
		{
			switch (jsonPropertyName)
			{
				case "description": _description = DeserializePropertyValue<String>(ref reader); break;
				case "name": _name = DeserializePropertyValue<String>(ref reader); break;
				case "valueType": _valueType = DeserializePropertyValue<IntegerType>(ref reader); break;
				case "values": DeserializePropertyList<StructuralMetadataEnumValue>(ref reader, _values); break;
				default: base.DeserializeProperty(jsonPropertyName,ref reader); break;
			}
		}
	
	}

	/// <summary>
	/// An object defining classes and enums.
	/// </summary>
	#if NET6_0_OR_GREATER
	[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors)]
	#endif
	[global::System.CodeDom.Compiler.GeneratedCodeAttribute("SharpGLTF.CodeGen", "1.0.0.0")]
	partial class StructuralMetadataSchema : ExtraProperties
	{
	
		private ChildrenDictionary<StructuralMetadataClass,StructuralMetadataSchema> _classes;
		
		private String _description;
		
		private ChildrenDictionary<StructuralMetadataEnum,StructuralMetadataSchema> _enums;
		
		private String _id;
		
		private String _name;
		
		private String _version;
		
	
		protected override void SerializeProperties(Utf8JsonWriter writer)
		{
			base.SerializeProperties(writer);
			SerializeProperty(writer, "classes", _classes);
			SerializeProperty(writer, "description", _description);
			SerializeProperty(writer, "enums", _enums);
			SerializeProperty(writer, "id", _id);
			SerializeProperty(writer, "name", _name);
			SerializeProperty(writer, "version", _version);
		}
	
		protected override void DeserializeProperty(string jsonPropertyName, ref Utf8JsonReader reader)
		{
			switch (jsonPropertyName)
			{
				case "classes": DeserializePropertyDictionary<StructuralMetadataClass>(ref reader, _classes); break;
				case "description": _description = DeserializePropertyValue<String>(ref reader); break;
				case "enums": DeserializePropertyDictionary<StructuralMetadataEnum>(ref reader, _enums); break;
				case "id": _id = DeserializePropertyValue<String>(ref reader); break;
				case "name": _name = DeserializePropertyValue<String>(ref reader); break;
				case "version": _version = DeserializePropertyValue<String>(ref reader); break;
				default: base.DeserializeProperty(jsonPropertyName,ref reader); break;
			}
		}
	
	}

	/// <summary>
	/// An array of binary property values.
	/// </summary>
	#if NET6_0_OR_GREATER
	[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors)]
	#endif
	[global::System.CodeDom.Compiler.GeneratedCodeAttribute("SharpGLTF.CodeGen", "1.0.0.0")]
	partial class PropertyTableProperty : ExtraProperties
	{
	
		private const ArrayOffsetType _arrayOffsetTypeDefault = ArrayOffsetType.UINT32;
		private ArrayOffsetType? _arrayOffsetType = _arrayOffsetTypeDefault;
		
		private Int32? _arrayOffsets;
		
		private System.Text.Json.Nodes.JsonNode _max;
		
		private System.Text.Json.Nodes.JsonNode _min;
		
		private System.Text.Json.Nodes.JsonNode _offset;
		
		private System.Text.Json.Nodes.JsonNode _scale;
		
		private const ArrayOffsetType _stringOffsetTypeDefault = ArrayOffsetType.UINT32;
		private ArrayOffsetType? _stringOffsetType = _stringOffsetTypeDefault;
		
		private Int32? _stringOffsets;
		
		private Int32 _values;
		
	
		protected override void SerializeProperties(Utf8JsonWriter writer)
		{
			base.SerializeProperties(writer);
			SerializePropertyEnumSymbol<ArrayOffsetType>(writer, "arrayOffsetType", _arrayOffsetType, _arrayOffsetTypeDefault);
			SerializeProperty(writer, "arrayOffsets", _arrayOffsets);
			SerializeProperty(writer, "max", _max);
			SerializeProperty(writer, "min", _min);
			SerializeProperty(writer, "offset", _offset);
			SerializeProperty(writer, "scale", _scale);
			SerializePropertyEnumSymbol<ArrayOffsetType>(writer, "stringOffsetType", _stringOffsetType, _stringOffsetTypeDefault);
			SerializeProperty(writer, "stringOffsets", _stringOffsets);
			SerializeProperty(writer, "values", _values);
		}
	
		protected override void DeserializeProperty(string jsonPropertyName, ref Utf8JsonReader reader)
		{
			switch (jsonPropertyName)
			{
				case "arrayOffsetType": _arrayOffsetType = DeserializePropertyValue<ArrayOffsetType>(ref reader); break;
				case "arrayOffsets": _arrayOffsets = DeserializePropertyValue<Int32?>(ref reader); break;
				case "max": _max = DeserializePropertyValue<System.Text.Json.Nodes.JsonNode>(ref reader); break;
				case "min": _min = DeserializePropertyValue<System.Text.Json.Nodes.JsonNode>(ref reader); break;
				case "offset": _offset = DeserializePropertyValue<System.Text.Json.Nodes.JsonNode>(ref reader); break;
				case "scale": _scale = DeserializePropertyValue<System.Text.Json.Nodes.JsonNode>(ref reader); break;
				case "stringOffsetType": _stringOffsetType = DeserializePropertyValue<ArrayOffsetType>(ref reader); break;
				case "stringOffsets": _stringOffsets = DeserializePropertyValue<Int32?>(ref reader); break;
				case "values": _values = DeserializePropertyValue<Int32>(ref reader); break;
				default: base.DeserializeProperty(jsonPropertyName,ref reader); break;
			}
		}
	
	}

	/// <summary>
	/// Properties conforming to a class, organized as property values stored in binary columnar arrays.
	/// </summary>
	#if NET6_0_OR_GREATER
	[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors)]
	#endif
	[global::System.CodeDom.Compiler.GeneratedCodeAttribute("SharpGLTF.CodeGen", "1.0.0.0")]
	partial class PropertyTable : ExtraProperties
	{
	
		private String _class;
		
		private const Int32 _countMinimum = 1;
		private Int32 _count;
		
		private String _name;
		
		private ChildrenDictionary<PropertyTableProperty,PropertyTable> _properties;
		
	
		protected override void SerializeProperties(Utf8JsonWriter writer)
		{
			base.SerializeProperties(writer);
			SerializeProperty(writer, "class", _class);
			SerializeProperty(writer, "count", _count);
			SerializeProperty(writer, "name", _name);
			SerializeProperty(writer, "properties", _properties);
		}
	
		protected override void DeserializeProperty(string jsonPropertyName, ref Utf8JsonReader reader)
		{
			switch (jsonPropertyName)
			{
				case "class": _class = DeserializePropertyValue<String>(ref reader); break;
				case "count": _count = DeserializePropertyValue<Int32>(ref reader); break;
				case "name": _name = DeserializePropertyValue<String>(ref reader); break;
				case "properties": DeserializePropertyDictionary<PropertyTableProperty>(ref reader, _properties); break;
				default: base.DeserializeProperty(jsonPropertyName,ref reader); break;
			}
		}
	
	}

	/// <summary>
	/// A texture containing property values.
	/// </summary>
	#if NET6_0_OR_GREATER
	[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors)]
	#endif
	[global::System.CodeDom.Compiler.GeneratedCodeAttribute("SharpGLTF.CodeGen", "1.0.0.0")]
	partial class PropertyTextureProperty : TextureInfo
	{
	
		private const int _channelsMinItems = 1;
		private List<Int32> _channels;
		
		private System.Text.Json.Nodes.JsonNode _max;
		
		private System.Text.Json.Nodes.JsonNode _min;
		
		private System.Text.Json.Nodes.JsonNode _offset;
		
		private System.Text.Json.Nodes.JsonNode _scale;
		
	
		protected override void SerializeProperties(Utf8JsonWriter writer)
		{
			base.SerializeProperties(writer);
			SerializeProperty(writer, "channels", _channels, _channelsMinItems);
			SerializeProperty(writer, "max", _max);
			SerializeProperty(writer, "min", _min);
			SerializeProperty(writer, "offset", _offset);
			SerializeProperty(writer, "scale", _scale);
		}
	
		protected override void DeserializeProperty(string jsonPropertyName, ref Utf8JsonReader reader)
		{
			switch (jsonPropertyName)
			{
				case "channels": DeserializePropertyList<Int32>(ref reader, _channels); break;
				case "max": _max = DeserializePropertyValue<System.Text.Json.Nodes.JsonNode>(ref reader); break;
				case "min": _min = DeserializePropertyValue<System.Text.Json.Nodes.JsonNode>(ref reader); break;
				case "offset": _offset = DeserializePropertyValue<System.Text.Json.Nodes.JsonNode>(ref reader); break;
				case "scale": _scale = DeserializePropertyValue<System.Text.Json.Nodes.JsonNode>(ref reader); break;
				default: base.DeserializeProperty(jsonPropertyName,ref reader); break;
			}
		}
	
	}

	/// <summary>
	/// Properties conforming to a class, organized as property values stored in textures.
	/// </summary>
	#if NET6_0_OR_GREATER
	[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors)]
	#endif
	[global::System.CodeDom.Compiler.GeneratedCodeAttribute("SharpGLTF.CodeGen", "1.0.0.0")]
	partial class PropertyTexture : ExtraProperties
	{
	
		private String _class;
		
		private String _name;
		
		private ChildrenDictionary<PropertyTextureProperty,PropertyTexture> _properties;
		
	
		protected override void SerializeProperties(Utf8JsonWriter writer)
		{
			base.SerializeProperties(writer);
			SerializeProperty(writer, "class", _class);
			SerializeProperty(writer, "name", _name);
			SerializeProperty(writer, "properties", _properties);
		}
	
		protected override void DeserializeProperty(string jsonPropertyName, ref Utf8JsonReader reader)
		{
			switch (jsonPropertyName)
			{
				case "class": _class = DeserializePropertyValue<String>(ref reader); break;
				case "name": _name = DeserializePropertyValue<String>(ref reader); break;
				case "properties": DeserializePropertyDictionary<PropertyTextureProperty>(ref reader, _properties); break;
				default: base.DeserializeProperty(jsonPropertyName,ref reader); break;
			}
		}
	
	}

	/// <summary>
	/// An attribute containing property values.
	/// </summary>
	#if NET6_0_OR_GREATER
	[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors)]
	#endif
	[global::System.CodeDom.Compiler.GeneratedCodeAttribute("SharpGLTF.CodeGen", "1.0.0.0")]
	partial class PropertyAttributeProperty : ExtraProperties
	{
	
		private String _attribute;
		
		private System.Text.Json.Nodes.JsonNode _max;
		
		private System.Text.Json.Nodes.JsonNode _min;
		
		private System.Text.Json.Nodes.JsonNode _offset;
		
		private System.Text.Json.Nodes.JsonNode _scale;
		
	
		protected override void SerializeProperties(Utf8JsonWriter writer)
		{
			base.SerializeProperties(writer);
			SerializeProperty(writer, "attribute", _attribute);
			SerializeProperty(writer, "max", _max);
			SerializeProperty(writer, "min", _min);
			SerializeProperty(writer, "offset", _offset);
			SerializeProperty(writer, "scale", _scale);
		}
	
		protected override void DeserializeProperty(string jsonPropertyName, ref Utf8JsonReader reader)
		{
			switch (jsonPropertyName)
			{
				case "attribute": _attribute = DeserializePropertyValue<String>(ref reader); break;
				case "max": _max = DeserializePropertyValue<System.Text.Json.Nodes.JsonNode>(ref reader); break;
				case "min": _min = DeserializePropertyValue<System.Text.Json.Nodes.JsonNode>(ref reader); break;
				case "offset": _offset = DeserializePropertyValue<System.Text.Json.Nodes.JsonNode>(ref reader); break;
				case "scale": _scale = DeserializePropertyValue<System.Text.Json.Nodes.JsonNode>(ref reader); break;
				default: base.DeserializeProperty(jsonPropertyName,ref reader); break;
			}
		}
	
	}

	/// <summary>
	/// Properties conforming to a class, organized as property values stored in attributes.
	/// </summary>
	#if NET6_0_OR_GREATER
	[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors)]
	#endif
	[global::System.CodeDom.Compiler.GeneratedCodeAttribute("SharpGLTF.CodeGen", "1.0.0.0")]
	partial class PropertyAttribute : ExtraProperties
	{
	
		private String _class;
		
		private String _name;
		
		private ChildrenDictionary<PropertyAttributeProperty,PropertyAttribute> _properties;
		
	
		protected override void SerializeProperties(Utf8JsonWriter writer)
		{
			base.SerializeProperties(writer);
			SerializeProperty(writer, "class", _class);
			SerializeProperty(writer, "name", _name);
			SerializeProperty(writer, "properties", _properties);
		}
	
		protected override void DeserializeProperty(string jsonPropertyName, ref Utf8JsonReader reader)
		{
			switch (jsonPropertyName)
			{
				case "class": _class = DeserializePropertyValue<String>(ref reader); break;
				case "name": _name = DeserializePropertyValue<String>(ref reader); break;
				case "properties": DeserializePropertyDictionary<PropertyAttributeProperty>(ref reader, _properties); break;
				default: base.DeserializeProperty(jsonPropertyName,ref reader); break;
			}
		}
	
	}

	/// <summary>
	/// glTF extension that provides structural metadata about vertices, texels, and features in a glTF asset.
	/// </summary>
	#if NET6_0_OR_GREATER
	[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors)]
	#endif
	[global::System.CodeDom.Compiler.GeneratedCodeAttribute("SharpGLTF.CodeGen", "1.0.0.0")]
	partial class EXTStructuralMetadataRoot : ExtraProperties
	{
	
		private const int _propertyAttributesMinItems = 1;
		private ChildrenList<PropertyAttribute,EXTStructuralMetadataRoot> _propertyAttributes;
		
		private const int _propertyTablesMinItems = 1;
		private ChildrenList<PropertyTable,EXTStructuralMetadataRoot> _propertyTables;
		
		private const int _propertyTexturesMinItems = 1;
		private ChildrenList<PropertyTexture,EXTStructuralMetadataRoot> _propertyTextures;
		
		private StructuralMetadataSchema _schema;
		
		private String _schemaUri;
		
	
		protected override void SerializeProperties(Utf8JsonWriter writer)
		{
			base.SerializeProperties(writer);
			SerializeProperty(writer, "propertyAttributes", _propertyAttributes, _propertyAttributesMinItems);
			SerializeProperty(writer, "propertyTables", _propertyTables, _propertyTablesMinItems);
			SerializeProperty(writer, "propertyTextures", _propertyTextures, _propertyTexturesMinItems);
			SerializePropertyObject(writer, "schema", _schema);
			SerializeProperty(writer, "schemaUri", _schemaUri);
		}
	
		protected override void DeserializeProperty(string jsonPropertyName, ref Utf8JsonReader reader)
		{
			switch (jsonPropertyName)
			{
				case "propertyAttributes": DeserializePropertyList<PropertyAttribute>(ref reader, _propertyAttributes); break;
				case "propertyTables": DeserializePropertyList<PropertyTable>(ref reader, _propertyTables); break;
				case "propertyTextures": DeserializePropertyList<PropertyTexture>(ref reader, _propertyTextures); break;
				case "schema": _schema = DeserializePropertyValue<StructuralMetadataSchema>(ref reader); break;
				case "schemaUri": _schemaUri = DeserializePropertyValue<String>(ref reader); break;
				default: base.DeserializeProperty(jsonPropertyName,ref reader); break;
			}
		}
	
	}

}
