Сериализация объектов IronPython, которые наследуются от типов CLR

Это может быть немного странным вопросом, но есть ли надежный способ сериализации объектов IronPython, чьи классы расширяют типы CLR?

Например:

class Foo(System.Collections.Generic.List[str]): def Test(self): print "test!" 

System.Collections.Generic.List<string> сериализуется с помощью Pickle, поскольку он реализует интерфейс ISerializable , но испускаемые подклассы сериализуемых типов CLR, похоже, не работают, и я получаю ImportError: No module named Generic in mscorlib, Version=4 когда running pickle.dumps(Foo()) .

Кроме того, запуск обычного Formatter.Serialize(stream, object) дает мне:

 SystemError: Type 'IronPython.NewTypes.System.Collections.Generic.List`1_4$4' in Assembly Snippets.scripting, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' is not marked as serializable. 

Как реализовать сериализацию объектов IronPython при работе во встроенной среде C #?

Цитата из метаклассов clrtype

IronPython сегодня не поддерживает API-интерфейсы на основе отражения или пользовательские атрибуты, потому что IronPython не генерирует пользовательские типы CLR для каждого класса Python. Вместо этого он обычно использует один тип CLR для многих классов Python. Например, все три класса Python имеют один тип CLR.

 class shop(object): pass class cheese_shop(shop): def have_cheese(self, cheese_type): return False class argument_clinic(object): def is_right_room(self, room=12): return "I've told you once" import clr print clr.GetClrType(shop).FullName print clr.GetClrType(cheese_shop).FullName print clr.GetClrType(argument_clinic).FullName 

Несмотря на то, что cheese_shop наследует от shop и arguments_clinic наследует от объекта, все три класса имеют один и тот же базовый тип CLR

Я не пробовал, но, может быть, вы можете решить эту проблему с помощью ручной сериализации через суррогаты сериализации .

Я не знаю, если это то, что вам нужно, но вы можете рассмотреть версию protobuf python ( здесь )? Разумеется, я не тестировал его конкретно на железе. Это дает дополнительное преимущество в том, что существуют также реализации C #, которые могут помочь, сохраняя при этом независимость от платформы. Когда это возможно, я хочу, чтобы protobuf-net поддерживал типы DLR, но это большая работа.

В качестве побочного примечания, лично я бы рекомендовал иметь выделенный тип DTO, а не пытаться расширить встроенные типы.