---
tags: Parsing
---
# UAsset 5 Schema - Notes
## PropertyTag
In the engine, all properties are read, first, as a PropertyTag ([Header](https://github.com/EpicGames/UnrealEngine/blob/1d950f1094195e1a62b45c10c39312586509fcfd/Engine/Source/Runtime/CoreUObject/Public/UObject/PropertyTag.h?plain=1#L15), [Serialize](https://github.com/EpicGames/UnrealEngine/blob/1d950f1094195e1a62b45c10c39312586509fcfd/Engine/Source/Runtime/CoreUObject/Private/UObject/PropertyTag.cpp?plain=1#L81))
The property tag looks like:
```cpp
FName Name; // Name of property.
FName Type; // Type of property
int32 Size; // Property size.
int32 ArrayIndex; // Index if an array; else 0.
```
Depending on the value of Type, it will also contain one or more of
```cpp
uint8 BoolVal; // a boolean property's value
FName StructName; // Struct name if FStructProperty.
FGuid StructGuid;
FName EnumName; // Enum name if FByteProperty or FEnumProperty
FName InnerType; // Inner type if FArrayProperty, FSetProperty, or FMapProperty
FName ValueType; // Value type if UMapPropery
```
For EngineVersion >= 503:
```cpp
uint8 HasPropertyGuid;
FGuid PropertyGuid;
```
## Value type properties
The engine defines individual classes for each value type, e.g. FloatProperty , ByteProperty, etc.
Each property class takes the property tag as a constructor parameter, then just read their value type during deserialization.
#### Tag
`Type: (BoolProperty|FloatProperty|NameProperty|...)`
#### Data
Standard binary serialization for the value type.
## ArrayProperty
#### Tag
`Type: ArrayProperty`
`InnerType: (BoolProperty|FloatProperty|...)`
#### Data
The data of an ArrayProperty is just a series of child property values with no additional tag for each child property. BoolProperty and StructProperty adjust their serialization behavior in an array.
## BoolProperty
Property tags will store a BoolProperty's value in the tag, before PropertyGuid in `BoolVal`.
#### Tag
`Type: BoolProperty`
`BoolValue: bool`
#### Data
There are no bytes after tag
## StructProperty
StructProperties contain structs, so their type definition is more complex. The property's tag will point to struct type in the StructName property. The property has additional struct details provided as additional exports:
#### Tag
`Type: StructProperty`
`StructName: (Vector|Rotator|CustomStruct)`