Не зная тип перед десериализацией

Действительно ли возможно десериализовать (c#) часть xml, csv, json (независимо от того, что это), и не знают, что это - тип? Но будьте отданы объект (который в конечном счете является корректным типом)?

5
задан Paul 10 June 2010 в 17:20
поделиться

4 ответа

Да, это возможно.

Сериализованные данные XML/CSV/JSON должны содержать идентификаторы, позволяющие десериализатору знать, какие типы объектов создавать, поскольку это не может быть известно заранее. Чтобы десериализатор мог создавать новые экземпляры объектов, обычно используется шаблон проектирования FactoryMethod.

Десериализация сложнее, чем сериализация.

2
ответ дан 14 December 2019 в 13:26
поделиться

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

1
ответ дан 14 December 2019 в 13:26
поделиться

Это зависит от сериализации.

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

Сериализация XML так не работает, поэтому XmlSerializer требует тип в своем конструкторе.

Лучше всего использовать сценарий, в котором данные могут быть одним из ограниченного числа типов, все из которых наследуются от базового типа. Тогда вы можете передать базовый тип (который украшен атрибутами известного типа, чтобы он знал обо всех других типах, которыми он может быть) и затем десериализовать данные в стандартный базовый тип, а затем проинспектировать их.

CSV и JSON еще сложнее, поскольку в фреймворк не встроена поддержка их сериализации.

2
ответ дан 14 December 2019 в 13:26
поделиться

Обычно да. Но это зависит от того, какую сериализацию вы используете. Сериализованные данные должны содержать метаданные о типах сериализованных объектов. Например, сериализация xml (System.Xml.Serialization) не поддерживает этот сценарий.

1
ответ дан 14 December 2019 в 13:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: