Сериализация System.Drawing.Color в .NET - PullRequest
3 голосов
/ 20 марта 2010

Я использовал сериализацию .NET по умолчанию для класса с членом System.Drawing.Color. Сейчас этот код используется людьми, и мне нужно добавить в класс дополнительного члена, но все же десериализовать более старые версии.

Итак, я попробовал стандартный способ сделать это: интерфейс ISerializable, использующий методы SerializationInfo для получения членов типа int и string.

Проблема: в моем классе также есть член System.Drawing.Color, но SerializationInfo не предоставляет метод «GetColor» для чтения этого типа данных. Я попытался получить его как int и как строку и привести его к System.Drawing.Color, но не повезло.

Кто-нибудь знает, как десериализовать System.Drawing.Color из SerializationInfo?

Ответы [ 2 ]

1 голос
/ 20 марта 2010

Я использовал что-то подобное в прошлом.

 <Xml.Serialization.XmlIgnore()> Public BackColour As Drawing.Color

        Public Property xmlBackColour() As Integer
            Get
                Return BackColour.ToArgb
            End Get
            Set(ByVal value As Integer)
                BackColour = Drawing.Color.FromArgb(value)
            End Set
        End Property
1 голос
/ 20 марта 2010

Использование ISerializable не рекомендуется для работы с версиями. [OptionalField], входы и выходы хорошо описаны в этой статье библиотеки MSDN .

Отвечая на ваш вопрос: SerializationInfo.GetValue ("fieldName", typeof (Color)) должен дать вам цвет. Вам нужно будет привести возвращаемое значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...