typ s IXmlSerializable   zodpovězená otázka

VB.NET, XML, Compact Framework

Dobrý den

WinCE CF.NET 3.5

K uložení parametrů přístroje používám DataTable a jeho fci WriteXml.

To funguje bezvadně do xml se dá i snadno zvenčí zasáhnout(podmínka).

Ale nyní jsem narazil na problém. Potřebuji uchovávat pole Single nebo i jiných. V DataTablu to chodí vpořádku. Ale uložení do xml vyvolá vyjímku, že typ system.array nemá implementovanou ixmlserializable zkoušel jsem také list(of), ale stejný výsledek.

Nevíte někdo jaký typ, schopný uchovat víc hodnot, má implementovaný tento interface ? Případně nějaký postup pro implementování ixmlserializable.

Děkuji

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Mno zkusil jsem:

<Serializable()> _
Public Class userList(Of T) : Inherits List(Of T)
    Implements System.Xml.Serialization.IXmlSerializable

    Public Function GetSchema() As System.Xml.Schema.XmlSchema Implements System.Xml.Serialization.IXmlSerializable.GetSchema
        Return Nothing
    End Function

    Public Sub ReadXml(ByVal reader As System.Xml.XmlReader) Implements System.Xml.Serialization.IXmlSerializable.ReadXml
        Me.Clear()
        Dim serializer As New System.Xml.Serialization.XmlSerializer(GetType(T))

        Dim d As Integer = reader.Depth
        reader.Read()

        While d + 1 = reader.Depth
            Dim o As Object = serializer.Deserialize(reader)

            If TypeOf (o) Is T Then
                Me.Add(o)
            End If
        End While
    End Sub

    Public Sub WriteXml(ByVal writer As System.Xml.XmlWriter) Implements System.Xml.Serialization.IXmlSerializable.WriteXml
        Dim serializer As New System.Xml.Serialization.XmlSerializer(GetType(T))

        For i As Integer = 0 To Me.Count - 1
            serializer.Serialize(writer, Me(i))
        Next

    End Sub
End Class

Tohle funguje, ale určitě to není správně(čistě).

Jsetli někdo víte jak to napsat správně, tak prosím.

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Myslím, že tohle je pěkné a čisté řešení - prostě jste si do Listu doplnil implementaci rozhraní, které používáte. Možná v .NETu existuje nějaká kolekce, která už toto splňuje, ale o žádné takové nevím.

Možná akorát to GetSchema by nemuselo vracet Nothing, ale možná je to správně, to záleží na tom, co říká dokumentace, jak se to má chovat. Třeba to schéma vracet nemusí.

nahlásit spamnahlásit spam 0 / 2 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback