Лучшая библиотека сериализации для .net с возможностью правильной десериализации наследования - PullRequest
2 голосов
/ 24 января 2009

Мне нужна библиотека сериализации для .net с лучшими функциями, чем стандартный сериализатор xml. Проблема в том, что он не полиморфен - скажем, у вас есть класс B: A {}, и вы сериализовали тип B, вы должны иметь возможность вызвать A myBaseType = Deserialize (xml) и получить экземпляр типа B в переменная myBaseType.

У меня есть реализация на http://refactormycode.com/codes/710-polymorphic-xml-serializer с модульными тестами, с которыми должна работать библиотека сериализации. Эта реализация не будет работать, если сериализуемый объект имеет дочерний тип, который также является полиморфным сериализованным типом, поэтому мне нужно что-то лучше.

спасибо!

Ответы [ 3 ]

1 голос
/ 24 января 2009

Если вы можете обработать дополнительную многословность, идущую к сериализатору, который внедряет информацию о типе в результирующий поток, вероятно, лучше всего.

.Net предоставляет SoapFormatter , который является слишком многословным и делает вещи, которые вам, вероятно, не понадобятся, но когда вы десериализуете поток, он просто вернет вам соответствующие объекты (не нужно указывать тип просто приведите корневой объект к типу, который вам известен).

В качестве дополнительного преимущества он будет правильно обрабатывать циклы и общие ссылки в графе объектов.

0 голосов
/ 25 января 2009

protobuf-net поддерживает большинство маршрутов наследования (даже если спецификация не поддерживает). Есть один известный глюк (я работаю над ним ;-p) - но он охватывает большинство вариантов.

0 голосов
/ 24 января 2009

Можете ли вы использовать двоичный сериализатор .NET или он должен быть XML? У меня был похожий список жалоб на обработку XML в .NET, особенно при попытке сериализации графов, а не деревьев.

В местах, где мне нужен был XML для правильной работы, я заканчивал тем, что просто развертывал свой собственный код сериализации для каждого класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...