Сохранение класса без пустого конструктора в My.Settings напрямую работает, но не как член пользовательского класса?

Мне известно, что к членам пользовательских классов предъявляются те же требования, что и к самому классу, когда они должны быть сохранены в My.Settings. Одним из таких требований является то, что у класса и всех его членов есть пустой конструктор. Теперь мне нужно сохранить некоторые настройки шрифта. У шрифта нет пустого конструктора согласно документации. Логически, мой класс, содержащий члены типа Font, не может быть сохранен в My.Settings.

Пока все так плохо. Однако я заметил, что по какой-то причине можно сохранить значение объекта Font непосредственно в My.Settings. Я подтвердил, что это тот же System.Drawing.Font, который я пытался использовать в своем пользовательском классе.

Мои два вопроса сейчас:

  1. Как / почему это возможно?

  2. Учитывая то, что я написал о том, что Font является возможным My.Setting, есть ли способ иметь член типа Font и сохранять класс, не создавая собственную реализацию Font [или что-то с необходимыми свойствами]?

Я пытался найти это в Google, но безрезультатно. Документация для My.Settings/serialization тоже не сильно помогла.

Изменить: вот код моего пользовательского класса:

<Serializable()> Public Class MyObject
Implements ISerializable

Private _name As String
Private _text As String
Private _font As Font

Public Property Name As String
    Get
        Return _name
    End Get
    Set(value As String)
        _name = value
    End Set
End Property

Public Property Text As String
    Get
        Return _text
    End Get
    Set(value As String)
        _text = value
    End Set
End Property

Public Property Font As Font
    Get
        Return _font
    End Get
    Set(value As Font)
        _font = value
    End Set
End Property

<NonSerialized()> Public Const CurrentDate As String = "something"
<NonSerialized()> Public Const DateSelection As String = "something else"
End Class

А вот код моей ключевой коллекции пользовательских объектов класса:

Imports System.Collections.ObjectModel

<Serializable()> Public Class MyCollection
Inherits KeyedCollection(Of String, MyObject)

Public Sub New()
    MyBase.New()
End Sub

Protected Overrides Function GetKeyForItem(item As MyObject) As String
    Return item.Name
End Function
End Class

0 ответов

Другие вопросы по тегам