Очень полезная публикация очень помогла.
Я решил перейти с версией Скотта к типу данных Nullable (Of T), однако отправленный код все еще сериализует элемент Nullable, когда он является Null - хотя и без атрибут «xs: nil =« true ».
Мне нужно было заставить сериализатор полностью отказаться от тега, поэтому я просто реализовал IXmlSerializable в структуре (это в VB, но вы получаете изображение):
'----------------------------------------------------------------------------
' GetSchema
'----------------------------------------------------------------------------
Public Function GetSchema() As System.Xml.Schema.XmlSchema Implements System.Xml.Serialization.IXmlSerializable.GetSchema
Return Nothing
End Function
'----------------------------------------------------------------------------
' ReadXml
'----------------------------------------------------------------------------
Public Sub ReadXml(ByVal reader As System.Xml.XmlReader) Implements System.Xml.Serialization.IXmlSerializable.ReadXml
If (Not reader.IsEmptyElement) Then
If (reader.Read AndAlso reader.NodeType = System.Xml.XmlNodeType.Text) Then
Me._value = reader.ReadContentAs(GetType(T), Nothing)
End If
End If
End Sub
'----------------------------------------------------------------------------
' WriteXml
'----------------------------------------------------------------------------
Public Sub WriteXml(ByVal writer As System.Xml.XmlWriter) Implements System.Xml.Serialization.IXmlSerializable.WriteXml
If (_hasValue) Then
writer.WriteValue(Me.Value)
End If
End Sub
Я предпочитаю этот метод использовать (foo) Specified pattern, поскольку для этого требуется добавить к моим объектам нагрузки избыточных избыточных свойств, тогда как использование нового типа Nullable требует повторного набора свойств.