У меня есть класс, который хранит и обрабатывает некоторые объекты. В зависимости от количества входов я не могу хранить объекты в памяти, поэтому я пытаюсь выполнить сериализацию своих объектов, которые будут записываться на жесткий диск с использованием буферов протоколов. Я использую C# и protobuf-csharp-port. Я знаю protobuf-net как альтернативный порт; до сих пор я работал с первым вариантом, но я открыт для изменений, если это необходимо на основе моих потребностей.имитировать генераторы с протокольным буфером
Класс сериализовать в это упрощенная форма выглядит следующим образом:
class Entity<T> where T: IComparable<T>
{
int id;
T metaData;
}
Так во время компиляции у меня нет подсказки о metaData
. Googling Я заметил, что расширения - это правильный путь для следования (как предложено на google's page и this question); поэтому я определяю файл Entity.proto
для класса Entity
следующим образом:
message Entity
{
required int32 id = 1 [default = 0];
extensions 2 to max;
}
, и я хотел бы пользователю предоставить свой собственный .proto
файл T
без необходимости доступа или повторной компиляции Entity.proto
. В этой связи у меня есть вопросы:
- Нужно ли мне менять
Entity.proto
? - Что должно быть
T.proto
? - Как я могу получить
T
в моем коде C#?
Пожалуйста, исправьте меня, если я ошибаюсь: protobuf-net поддерживает generics, который затем я могу скомпилировать мою библиотеку с 'Entity' и это serializer (1). При использовании библиотеки вместе с пользователем 'T' также будет предоставлен его сериализатор (2). В конечном итоге экземпляр «Entity » будет сериализован с использованием (1) и (2). –
Hamed
@hamed чаще всего при использовании protobuf-net, вы вообще не распространяете сериализатор: библиотека будет беспокоиться об этом, когда это необходимо. Главные времена, когда вы распространяете сериализатор, для AOT-устройств –
может быть слишком много смешивания с ООП, но я полностью смущен. 'Entity' не знает' T', поэтому он не может его сериализовать. С другой стороны, 'T' не знает структуру данных Entity, поэтому ни один из них не может обеспечить сериализацию. Тогда мне интересно, как «Entity» сериализуется? –
Hamed