TypeConverter для сериализации

Является ли обычной практикой использование TypeConverter для сериализации? Есть класс, которым я не владею, который имеет TypeConverter с потерями. При преобразовании в строку он форматирует свои данные с плавающей запятой с помощью «G4», поэтому, когда этот тип отображается в PropertyGrid, он легко читается.

Я также хотел бы использовать этот TypeConverter для преобразования из строки, создавая экземпляр этого класса. Прямо сейчас я проверяю CultureInfo, переданный в TypeConverter.ConvertTo, и использую красивое преобразование с потерями только в том случае, если CultureInfo не является InvariantCulture.

Я хотел бы знать, если я иду об этом неправильно.


person Cat Zimmermann    schedule 11.06.2010    source источник


Ответы (2)


Если вы сериализуете данные в файл или другой формат обмена для совместного использования пользователями в разных культурах, использование чего-либо, кроме InvariantCulture, не сработает.

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

person bbudge    schedule 11.06.2010
comment
Спасибо. Является ли текущее использование TypeConverter для вывода в формате с потерями в ProperyGrid также нормальной практикой? - person Cat Zimmermann; 12.06.2010

Ну, это не нормальная практика. Вам нужен какой-то контроль над сериализацией объекта, чтобы он не вводил вас в заблуждение деталями, относящимися только к PropertyGrid. Обычно это не сложно сделать:

class VendorSerialized {
    public VendorSerialized(VendorType obj) {
        // Set properties
        //...
    }
    public VendorType AfterSerialization() {
        var obj = new VendorType();
        // Set the vendor object properties from deserialized data
        //...
        return obj;
    }
    // Properties here...
    //...
}

Задача решена :)

person Hans Passant    schedule 11.06.2010
comment
Я не понимаю, как строки, специфичные для культуры, когда-либо станут входными данными для десериализации. Я что-то пропустил? - person Cat Zimmermann; 12.06.2010
comment
Эээ, а почему вы хотите, чтобы десериализация прерывалась при изменении культуры? Локализация — это деталь пользовательского интерфейса, она никогда не должна влиять на сохраняемые данные. - person Hans Passant; 12.06.2010
comment
Вам нужен какой-то контроль над сериализацией объекта, чтобы он не сбивал вас с толку деталями, относящимися только к PropertyGrid. У меня есть контроль в TypeConverter.ConvertToString, не так ли? У меня есть информация о культуре, которая мне нужна, чтобы принять решение о том, выдаю ли я преттифицированную строку или представление без потерь. Кажется, я не совсем понимаю ваш ответ. - person Cat Zimmermann; 12.06.2010