Можно ли использовать protobuf-net для (де) сериализации списка, содержащего разнородные объекты? - PullRequest
2 голосов
/ 22 мая 2011

Можно ли (де) сериализовать список разнородных объектов?

1 Ответ

2 голосов
/ 22 мая 2011

A List<object> создает ряд проблем для формата сериализации, который не включает метаданные типа ... но, как всегда, есть хитрости, ловушки и обходные пути.

Если вы имеете в виду на самом внешнем уровне , здесь есть несколько вариантов, которые вращаются вокруг использования другого тега (/ field-number) для обозначения типа сообщения. Это полезно в API (например, при использовании диалога сокетов), где в любое время могут ожидаться разные сообщения. В качестве примера можно привести: Как я могу отправить несколько типов объектов через Protobuf?

Внутри сообщения несколько сложнее; если список типов-кандидатов небольшой, то разумный обходной путь выглядит примерно так: Атрибуты Protobuf с иерархией общих классов , т. е. обработка каждого ожидаемого типа как специализации.

Если тип не может быть предсказан, тогда v2 включает другой обходной путь, но включает больше метаданных, чем обычно; см http://marcgravell.blogspot.com/2011/03/objects-graphs-and-all-that-jazz.html

...