Я реализовал хранение строкой в виде json, как выше писал Вильдар. Собственно говоря, он и сподвиг меня к этой идее. И в этом есть свои плюсы, но они зависят уже от архитектуры приложения. Дело в том, что я у себя сделал базовый класс для всех своих примитивов, в котором и реализовано сохранение\чтение расширенных данных. При этом вся эта работа производится через рефлексию, а нужные данные помечаются специальными атрибутами. Таким образом, при разработке новых примитивов меня вообще больше не заботит вопрос о расширенных данных - я создаю новый класс, добавляю свойства, помечаю их атрибутами и все - все остальное уже работает. Таким образом я просто сосредотачиваюсь только на логике работы примитива. Но повторюсь - зависит от архитектуры приложения.
Конечно, самый главный минус - ограничение в 16к. Однако, это ограничение "пугает" только в одном случае - когда примитив может содержать множество точек - есть вероятность, что можно перевалить за предел. В других случаях я точно знаю, что переполнения не произойдет, так как количество данных заведомо известно.
Ну а скорость работы при десериализации и парсинге столь незначительны, что их просто не заметишь. Благо, сейчас не 80-ые и проблем с вычислительными мощностями нет