dotSITE
Учебник по C# Шаблоны проектирования Work in Murano Software.
новости материалы решения форумы группы настройки/о проекте

Автор: Руслан
Тема: Complex object serialization
Дата: 1/17/2002 10:50:00 AM
Вопрос: Как сериализовать класс, который имплементирует интерфейсы: IEnumerable, IEnumerator ?

При сериализации вылетает следующее:

Error:
An unhandled exception of type 'System.InvalidOperationException' occurred in system.xml.dll
Additional information: You must implement the Add(System.Object) method on MySerialization.MyNamespace.GridColumns because it inherits from IEnumerable.

Но ведь в интерфейсе IEnumerable нет метода Add(System.Object) !!!



Код:

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Dim tGrid As New MyNamespace.MyGrid()

tGrid.Name = "GridName"

tGrid.Caption = "GridCaption"

tGrid.Columns.Attribute1 = "a111"

tGrid.Columns.Attribute2 = "a222"

tGrid.Columns.Attribute3 = "a333"

Dim tColumn As MyNamespace.GridColumn

tColumn = New MyNamespace.GridColumn()

tColumn.ColumnID = 1

tColumn.ColumnCaption = "First"

tGrid.Columns.Add(tColumn)

tColumn = New MyNamespace.GridColumn()

tColumn.ColumnID = 2

tColumn.ColumnCaption = "Second"

tGrid.Columns.Add(tColumn)

tColumn = New MyNamespace.GridColumn()

tColumn.ColumnID = 3

tColumn.ColumnCaption = "Third"

tGrid.Columns.Add(tColumn)



Dim tExtraTypes(1) As Type

tExtraTypes(0) = GetType(MyNamespace.GridColumn)

tExtraTypes(1) = GetType(MyNamespace.GridColumns)

Dim xs As System.Xml.Serialization.XmlSerializer

xs = New System.Xml.Serialization.XmlSerializer(tGrid.GetType, tExtraTypes) ' Error raised here.............



End Sub









Namespace MyNamespace

Public Class MyGrid

Public Name As String

Public Caption As String

Public Columns As GridColumns

Public Sub New()

Columns = New GridColumns()

End Sub

Protected Overrides Sub Finalize()

Columns = Nothing

End Sub

End Class















Public Class GridColumns

Implements IEnumerable, IEnumerator



Public Attribute1 As String

Public Attribute2 As String

Public Attribute3 As String

Private pColumns As Collection

Private tCurrent As Integer

ReadOnly Property Count()

Get

Count = pColumns.Count

End Get

End Property

Public ReadOnly Property Current() As Object Implements System.Collections.IEnumerator.Current

Get

Return pColumns(tCurrent)

End Get

End Property

Public Function MoveNext() As Boolean Implements System.Collections.IEnumerator.MoveNext

If tCurrent < Me.Count Then

tCurrent = tCurrent + 1

End If

End Function

Public Sub Reset() Implements System.Collections.IEnumerator.Reset

tCurrent = 0

End Sub

Public Sub New()

pColumns = New Collection()

End Sub

Protected Overrides Sub Finalize()

pColumns = Nothing

MyBase.Finalize()

End Sub

Default ReadOnly Property Item(ByVal rID As String) As GridColumn

Get

Return pColumns(rID)

End Get

End Property

Public Function Add(ByRef rItem As GridColumn) As Boolean

pColumns.Add(rItem, rItem.ColumnID)

End Function

Public Function GetEnumerator() As System.Collections.IEnumerator Implements System.Collections.IEnumerable.GetEnumerator

Return pColumns.GetEnumerator()

End Function

End Class













Public Class GridColumn

Public ColumnID As Integer

Public ColumnCaption As String

Public Sub New()

End Sub

End Class

End Namespace





Any suggestions ?





 VB.NET -- Программирование на VB.NET
 Complex object serialization Руслан    1/17/2002 10:50:00 AM
 RE: Complex object serialization Anonymous    8/22/2005 1:53:00 AM


Контакт Реклама на сайте Спонсорам Веб мастерам

Лицензионное соглашение - © 2000-2010 dotSITE
Хостинг .NET предоставлен PARKING.RU
Поддержку сайта осуществляет Murano Software Inc., Offshore software development