Я хотел бы сериализовать и десериализовать смешанные данные в XML. После некоторых поисков я обнаружил, что есть два способа сделать это: System.Runtime.Serialization.Formatters.Soap.SoapFormatter и System.Xml.Serialization.XmlSerializer . Однако ни один из них не соответствует моим требованиям, поскольку:
- SoapFormatter не поддерживает сериализацию универсальных типов
- XmlSerializer отказывается сериализовать типы, которые реализуют IDictionary , не говоря уже о том, что он гораздо менее прост в использовании, чем "обычная" сериализация (например, см. Этот вопрос SO )
Мне интересно, существует ли реализация, которая не имеет этих ограничений? Я нашел попытки (например, CustomXmlSerializer и YAXLib , как предложено в связанном вопросе SO ), но, похоже, они тоже не работают.
Я думал о написании такого сериализатора самостоятельно (хотя это, конечно, не кажется очень легкой задачей), но потом я обнаружил, что ограничен CLR, так как не могу создавать экземпляры объектов типов, которые выиграли У меня нет конструктора без параметров, даже если я использую отражение. Я помню, что где-то читал, что реализации в System.Runtime.Serialization каким-то образом обходят обычный механизм создания объектов при десериализации объектов , хотя я не уверен. Любые намеки на то, как это можно сделать?
(См. Редакцию № 3)
Может кто-нибудь, пожалуйста, указать мне правильное направление с этим?
Редактировать : Я использую .NET 3.5 SP1.
Редактировать # 2 : Просто чтобы прояснить ситуацию, я бы хотел, чтобы решение, максимально приближенное к использованию BinaryFormatter, означало бы, что для него потребуется как можно меньше дополнительного кода и аннотаций.
Edit # 3 : с некоторым дополнительным поиском в Google я нашел класс .NET с именем System.Runtime.Serialization.FormatterServices.GetUninitializedObject , который фактически может возвращать "обнуленные" объекты объекта. указанный тип, который отлично помогает в десериализации (если я получу это реализовать самостоятельно). Я все же хотел бы найти существующее решение.