Можно ли использовать protobuf-net Serializer и одновременно соответствующий файл *.proto?

У меня есть тип .NET, который не атрибутирован ни ProtoContract, ни DataContract. Кроме того, не все его состояния должны быть прото-сериализованы. Могу ли я определить для него файл .proto, но в то же время использовать какой-либо сериализатор для его сериализации, как если бы он был атрибутирован ProtoContract?

Спасибо.


person mark    schedule 19.05.2011    source источник


Ответы (1)


В качестве третьего варианта можно использовать [XmlType] и [XmlElement(Order=n)]... но я не думаю, что это то, что вы имеете в виду ;p

В «v2» это действительно возможно. Вам не нужно определять .proto — вы можете просто сказать ему, что делать во время выполнения, например:

var model = TypeModel.Create();
model.Add(typeof(SomeType)).Add("Foo", "Bar", "Blip");

теперь сохраните где-нибудь model (и используйте его повторно) и используйте model.Serialize(...) и model.Deserialize(...). Вышеприведенное конфигурирует SomeType для сериализации .Foo (как поле 1), .Bar (как поле 2) и .Blip (как поле 3). Конечно, есть много других способов сделать это для более тонкого контроля.

Он сгенерирует (по мере необходимости) сериализатор (через IL-эмит, очень быстро), который работает с вашими типами, как и ожидалось.

Существует загружаемая dll "v2", но она нуждается в обновлении - за последние несколько недель я сделал много исправлений. Я попытаюсь обновить эту dll позже сегодня, или вы можете собрать ее из кода.

person Marc Gravell    schedule 19.05.2011
comment
Привет Марк. Два вопроса. На сайте проекта вы говорите, что для производства следует использовать v1. Вы имеете в виду, что теперь v2 готов к производству? Потому что именно здесь я хочу его использовать. Во-вторых, если это возможно, можете ли вы взглянуть на stackoverflow.com/questions/6063273/? Спасибо. - person mark; 19.05.2011
comment
@mark — краткий ответ «да» (на самом деле, мы живем с ним в stackoverflow); более длинный ответ: есть некоторые функции v1, которые вам, вероятно, не нужны, и которые необходимо реализовать до того, как они станут «окончательными» — см. мой блог, как только я его напишу - person Marc Gravell; 19.05.2011
comment
Я не против сборки из исходников. Должен ли я оформить магистраль на странице protobuf-net.googlecode.com/svn/trunk? - person mark; 19.05.2011
comment
@marc - Итак, вы не рекомендуете собирать из исходников? - person mark; 20.05.2011
comment
@mark - Я совсем не возражаю... просто я не вносил никаких изменений за последние несколько минут... Я был занят написанием блога. - person Marc Gravell; 20.05.2011