Unfortunately the class TMensajeError constructor is not called during the recreation process when reloading the object, therefore, the sub list Items: ArrayOfTItemMensajeError is not created. It actually calls TObject.Create instead. So, you could indeed use the $type recreation process, but then you'll need to change the code, so the Items array is not created in the constructor, but in the getter of the property:
{ TMensajeError }
constructor TMensajeError.Create;
begin
end;
destructor TMensajeError.Destroy;
var
Item : TItemMensajeError;
begin
for Item in FItems do
Item.Free;
FITems.Free;
inherited;
end;
function TMensajeError.GetItems: ArrayOfTItemMensajeError;
begin
if not Assigned(FItems) then
FItems := ArrayOfTItemMensajeError.Create;
Result := FItems;
end;
Alternatively, you could implement the same technique as the blog post explains, by implementing the required interfaces on the object to properly create the message and call the correct constructor