You're correct that it's a hex string of the protobuf object bytes. To parse it, just drop the leading null byte and trailing four checksum bytes, then deserialize to the CEconItemPreviewDataBlock proto object. See here for an example using SteamKit.
Note that not all fields are optional still. For example, CSFloat appears to remove the itemid to help preserve a hidden seller's identity.