XmlSerializer. Сериализируйте неоднозначный

Если бы у вас был размер чанка, например, 3, вы могли бы сделать:

zip(*[iterable[i::3] for i in range(3)]) 

источник: http://code.activestate.com/recipes/303060-group-a- list-in-sequential-n-tuples /

Я бы использовал это, когда размер моего чанка равен фиксированному числу, которое я могу напечатать, например «3», и никогда не изменится.

5
задан John Saunders 25 July 2009 в 21:48
поделиться

1 ответ

Большая разница в том, когда вам нужно сообщить XmlSerializer о подпрограммах классов - например:

XmlSerializer xmlSerializer = new XmlSerializer(typeof(Car),
     new Type[] { typeof(SportCar), typeof(Radio) });

Здесь без дополнительной информации, если бы не не знали (только из Автомобиль ) ни о SportCar , ни о Radio - поэтому, если вы дадите ему объект, который на самом деле является SportCar , это не сработает:

Car car = new SportCar {...};
xmlSerializer.Serialize(destination, car);

Вы также можете сделать это, установив [XmlInclude (typeof (SportCar))] вместо определения типа Car :

[XmlInclude(typeof(SportCar))]
public class Car {...}

Это проще, но возможно только в том случае, если тип Автомобиль находится в сборке, которая знает о SportCar . Но вы часто знаете об этом , поэтому XmlInclude является предпочтительным вариантом.

Кроме того: XmlInclude дает некоторые преимущества в эффективности; за кулисами система использует динамическую генерацию типов, чтобы сделать XmlSerializer эффективным. По этой причине вам обычно следует удерживать (и повторно использовать) созданный вами экземпляр XmlSerializer ; например, сохраняя его в статическом поле. Однако система делает это автоматически для использования по умолчанию ( new XmlSerializer (typeof (Car)) ) - т.е. независимо от того, сколько раз вы используете этот конструктор, он генерирует динамический код только один раз. Если вы используете более сложный конструктор ( new XmlSerializer (typeof (Car), new Type [] {typeof (SportCar), typeof (Radio)}) ), он будет генерировать тип каждый раз.

как правило, вам следует сохранить (и повторно использовать) созданный вами экземпляр XmlSerializer ; например, сохраняя его в статическом поле. Однако система делает это автоматически для использования по умолчанию ( new XmlSerializer (typeof (Car)) ) - т.е. независимо от того, сколько раз вы используете этот конструктор, он генерирует динамический код только один раз. Если вы используете более сложный конструктор ( new XmlSerializer (typeof (Car), new Type [] {typeof (SportCar), typeof (Radio)}) ), он будет генерировать тип каждый раз.

как правило, вам следует сохранить (и повторно использовать) созданный вами экземпляр XmlSerializer ; например, сохраняя его в статическом поле. Однако система делает это автоматически для использования по умолчанию ( new XmlSerializer (typeof (Car)) ) - т.е. независимо от того, сколько раз вы используете этот конструктор, он генерирует динамический код только один раз. Если вы используете более сложный конструктор ( new XmlSerializer (typeof (Car), new Type [] {typeof (SportCar), typeof (Radio)}) ), он будет генерировать тип каждый раз.

8
ответ дан 14 December 2019 в 04:45
поделиться
Другие вопросы по тегам:

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