Then how would you access the data if someone returned that DTO?
Also why are you embedding all this logic in DTOs? they should be impl-free Data Transfer Objects. I’d also be avoiding inheritance in DTOs. If you are going to use Inheritance you should make any base classes abstract as different languages need to treat base classes differently.