Проблема наследования и известного типа

#c# #.net #protocol-buffers #protobuf-net

#c# #.net #протокол-буферы #protobuf-net

Вопрос:

Я пытаюсь использовать protobuf .net для сериализации экземпляра класса, который наследуется от базового класса. При попытке сериализации десериализации я получаю исключение о «типе, который не ожидается». Как я уже читал, добавление protoinclude с производным типом к базовому типу решит проблему. НО моя проблема в том, что я не могу добавить атрибут, поскольку я не знаю типы, которые будут выводить мою базу. Как я уже читал, я понимаю, что V2 предоставит способ определения модели типов для описания наследования. Итак, мои вопросы:

  1. Когда будет доступна версия V2?
  2. Есть ли обходной путь в ближайшее время для решения этой проблемы?

Заранее спасибо,

Gil

Ответ №1:

Версия V2 доступна как из nuget, так и из google-code (nuget на несколько оборотов впереди IIRC — и оба немного отстают от head). Есть несколько функций версии v1, которые еще не были повторно реализованы, но для большинства целей вы этого не заметите. Они будут добавлены повторно в свое время.

Повторите вашу проблему; это доступно через MetaType .AddSubType — однако, чтобы использовать этот подход, вы должны иметь возможность воспроизводить одни и те же идентификаторы int для каждого подтипа в будущем — они являются важными ключами и не должны меняться.

 RuntimeTypeModel.Default[typeof(SomeType)].AddSubType(7, subType);
  

В свойствах «объекта» также доступен dynamicType — однако в моделях, основанных на наследовании, есть несколько недостатков; Я бы пока этого избегал (это тоже будет исправлено в ближайшее время).

Комментарии:

1. Привет, Марк, спасибо за ваш ответ, но я не уверен, что полностью понял ваш ответ. 1. Доступен ли образец, который вы указали в своем ответе, в последней версии версии v1 («protobuf-net-VS10.msi»? 2. Что вы подразумеваете под «nuget на несколько оборотов впереди IIRC — и оба немного отстают от head»? Извините за вопрос, но что такое nuget и iirc? Я не понял из этого, есть ли финальная версия V2 для загрузки? В Google code я видел только бета-версию для загрузки («бета-версия protobuf-net v2 r450.zip «). Я пробовал, но есть методы, которые выдают не реализованное исключение. Спасибо Gil

2. @Gil «nuget» — это инструмент загрузки библиотеки внутри VS2010 — он позволяет вам легко получать доступ / обновлять тысячи библиотек (таких как protobuf-net) в IDE. Пока нет «окончательной» версии v2, поскольку существует целая очередь предложений функций и т. Д. Сохраняющаяся отметка «бета» просто связана с выдающимися редко используемыми функциями версии v1, такими как .GetProto<T> (для извлечения схемы .proto из модели) — они будут добавлены повторно, но еще не были переписаны . Так что, если вам это нужно, v1 может быть лучшим вариантом на данный момент. Присутствуют все повседневные функции.