Возможные Дублировать:
How to XML deserialize an object of Unknown Type?Deserialise для анонимного типа
Я только начал играть с сериализации и десериализации.
У меня есть модель типа Person, имеющая всего 2 свойства (имя и возраст), я могу сериализоваться в XML. Когда дело доходит до десериализа, насколько я знаю, я должен сказать компилятору, что это тип Person. С миром родового Т это кажется контрпродуктивным. Я бы подумал, что могу установить объект как объект InMemoryOnly (если вы его себе представляете), где объект создается во время выполнения, как и его параметры/поля/свойства и т. Д., Все они основаны на XML. Возможно, как анонимный тип; Я понимаю, что компилятор C# должен будет игнорировать это во время разработки и что мы потеряем intellisense, но поскольку все объекты передаются в память каким-либо образом, я не могу понять, почему это произойдет во время выполнения. Или, возможно, это было бы возможно с Reflection?
В любом случае, это то, что я пытаюсь сделать, десериализую из XML в общий объект. Возможно ли это с C#?
EDIT Только что нашел обман, так что теперь вопрос в том, почему C# (.NET) не делает этого? Я знаю, что ответ, вероятно, «потому что это не так», но мой вопрос МОЖЕТ быть возможным или будет больше проблем, чем это стоит для программиста?
Причина этого, насколько я знаю, для достижения этого означает, что сериализация и де-сериализация должны знать тип (в данном случае Person). Таким образом, если сериализ и десериализация происходят по сравнению с WCF (где сериализация и сериализация происходят в разных сборках), объект Person должен быть дублирован (и это противоречит принципу DRY)
Что могло бы быть преимуществом этого? Зачем пытаться сделать вещи бесполезно сложными и подразумеваемыми? По моему мнению и опыту, всегда лучше, чтобы ваш код явно выражал то, что он должен делать; это более читаемо, понятно и, следовательно, поддерживается. –
Ошибка больше не актуальна. С новым ключевым словом dynamic в .NET 4 это может быть достигнуто. Однако как бы вы использовали такой тип? Поскольку он был определен в XML, вы ничего не знаете об этом и не можете его использовать, не так ли? –
Итак, вы хотите десериализовать неизвестный тип или тот, который не будет известен до выполнения? –