Вы можете отредактировать схему, чтобы указать, что значение AverageSpeed не может быть пустым. Это требует, чтобы все, что производит XML, действительно следовало схеме.
============================================================================================================================================================================

лкиваюсь с довольно раздражающей проблемой при попытке десериализации конкретного XML-документа с помощью метода XmlSerializer.Deserialize ().

По сути, у меня есть строго типизированный XSD с элементом типа double. При попытке десериализации элемента для конкретного XML-документа я получаю обычное «System.FormatException: входная строка была в неправильном формате». исключение, потому что в этом конкретном документе элемент не имеет значения.

Вот код для вас, кретин.

**Образец XML-документа:**

**XSD:**

**Класс TrackInfo:**

**Пример кода десериализации:**

Я знаю, что исключение десериализации происходит из-за того, что пустая строка не может быть преобразована в двойную. Я также знаю, что значение по умолчанию не присваивается AverageSpeed, потому что фактически пустая строка является совершенно приемлемым значением.

Есть ли простой способ установить двойные значения по умолчанию на 0.0 (или любой другой тип) при десериализации, если в документе XML найдено пустое строковое значение? В идеале я бы хотел избежать реализации ISerializable, потому что мне не хочется тратить оставшуюся часть дня в горящей яме ада (т. Е. Внедрять ISerializable для примерно ста классов).

Ура! Жан-Мишель

Вы можете указать значение по умолчанию, как

/ редактировать: хорошо, странный beaviour здесь. Что бы я ни указывал в качестве значения в Атрибуте, это всегда значение поля:

Но никаких исключений не происходит.



 чтобы указать, что значение AverageSpeed не может быть пустым. Это требует, чтобы все, что производит XML, действительно следовало схеме.



удваивать? (с вопросительным знаком или Nullable <double>). Это позволяет вашему типу значения хранить нулевое значение, и десериализатор не будет подавлять нулевое значение.



[http://msdn.microsoft.com/en-us/library/system.componentmodel.defaultvalueattribute.aspx](https://msdn.microsoft.com/en-us/library/system.componentmodel.defaultvalueattribute.aspx)

**Примечание:** Атрибут DefaultValueAttribute не приведет к автоматической инициализации элемента со значением атрибута. Вы должны установить начальное значение в вашем коде.

Я думаю, что инициализация поля всегда будет иметь приоритет над значением DefaultValueAttribute. В любом случае, это именно то, что я искал.

Большое спасибо тебе, Себастьян!