Мне часто хотелось реализовать свою собственную сериализацию Xml и не использовать .NET XmlSerializer.
Я делаю это, добавляя свойство Xml в мой класс, который напрямую обрабатывает сериализацию с помощью XML-литералы .Это свойство может быть String
или XElement
в зависимости от того, как я собираюсь его использовать.
Вот как будет выглядеть свойство Xml String для вашего образца класса:
Public Property Xml() As String
Get
Return <Settings>
<var1><%= var1 %></var1>
<var2><%= var2 %></var2>
</Settings>.ToString
End Get
Set(ByVal value As String)
Dim xValue = XElement.Parse(value)
var1 = xValue...<var1>.Value = "true"
var2 = xValue...<var2>.Value = "true"
End Set
End Property
Это размещает всю логику сериализации в одном месте и позволяет избежать использования атрибутов для управления сериализацией экземпляра.Другое преимущество, которое я обнаружил, заключается в том, что это позволяет мне десериализовать класс, у которого нет конструктора по умолчанию.
В производственных сценариях я бы добавил метод расширения, который преобразует String
в Boolean
вместо сравнения с "true"
, поскольку допустимые логические значения Xml включают true, false, 1 и 0.