Привет!
Есть ли в NET 2.0 какой-нибудь способ создать экземпляр класса, который:
— не имеет конструктора по умолчанию.
— не имеет атрибута [Serializable]
— не public
Пример класса — SyncArrayList, который объявлен внутри ArrayList и возвращается следующим вызовом:
ArrayList.Synchronized(new ArrayList())
Вопрос такой возникает в контексте написания сериализатора/десериализатора классов в/из XML (подобного Java'вскому XStream).
Пока что только смог написать билдер, который создает динамический тип, наследующий нужный класс, эмиттит конструктор и создает экземпляр прокси. Но такой способ имеет два недостатка:
— в результате получается экземпляр прокси, а не нужного класса.
— если нужный класс не public, то выбрасывается TypeLoadException с сообщением 'access is denied' при попытке создать экземпляр прокси.
В Java'вском XStream'е для этого применен способ, который использьзуется самой Java-машиной в механизме сериализации. Может механизм NET тожно можно для этого применить? У меня пока есть только одна шальная идея — для нужного класса создать его бинарное сериализованное представление (не содержащее значений полей) в массиве байт и десериализовать его из этого массива. Что скажете, гуру, может такой способ прокатить? Или с классом, у которого не стоит атрибут [Serializable], такое не пройдет?
Может какие другие идеи подскажете?