It makes sense to separate the general concept of an asset from the specifics of each type of asset that you want to include. As a rule, this will take the form of a table of fixed assets, with different tables for each individual type of asset that you want to include, that is, books, equipment, furniture. The structure may look like this:
Asset(AssetId, Description, Comments) HardwareAsset(HardwareAssetId, AssetId, SerialNumber, ...) BookAsset(BookAssetId, AssetId, ISBN, Publisher, Author, ...)
Where the AssetId in HardwareAsset and BookAsset is the foreign key of the Asset table. This way you can track different assets and group them together when it matters.
EDIT: Alternatively, you can create a key value table to store values ββfor individual objects, which might look like this:
AssetValue(AssetValueId, AssetId, Key, Value)
However, this is a cumbersome solution, which when you save search fields quickly inflates your database. To fix the problem, you can limit the size of the field depending on your requirements. I do not suggest serializing the dictionary within one field, as this will inflate your database even more.