Serialize von List of Property verhindern

  • VB.NET
  • .NET (FX) 3.0–3.5

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von nafets.

    Serialize von List of Property verhindern

    Hallo,

    Ich habe in einem Usercontrol eine Property vom Typ List(of Buttons).


    VB.NET-Quellcode

    1. Private _SelectedButtons As New List(Of Button)
    2. Public Property SelectedButtons As List(Of Button)
    3. Get
    4. If _SelectedButtons.Count = 0 Then
    5. For Each b As ButtonIn Me.Controls
    6. If b.Focused = True And b.EditMode = True Then
    7. _SelectedButtons.Add(b)
    8. End If
    9. Next
    10. End If
    11. Return _SelectedButtons
    12. End Get
    13. Set(value As List(Of Button))
    14. _SelectedButtons = value
    15. onSelectedButtonsChanged()
    16. End Set
    17. End Property


    Kann ich die Property irgendwie von der Serialisierung ausschließen?

    <nonSerialize> funktioniert nicht. Ich bekomme die Fehlermeldun "Das Atribut NonSerializedAttribute kann nicht auf SelectedButtons angewendet werden, da das Attribut für diesen Deklarationstyp nicht gültig ist.

    Habt ihr eine Idee?

    Schon Danke im Voraus! :)
    lg

    tolio schrieb:

    ​properties sind methoden, die werden eh nicht serialisiert

    Properties sind keine Methoden, sondern Properties. Es spielt dabei keine Rolle, wie die Eigenschaft implementiert ist.

    Es gibt das XmlIgnore-Attribut, welches du direkt auf die Eigenschaft anwenden kannst.
    Mfg
    Vincent

    haarspalterei, natürlich sollte man properties nicht einfach allgemein mit methoden gleichsetzen, aber am ende des tages ergeben ein oder mehrere methoden zusammen ein property, wodrauf ich hinaus wollte ist einfach das ein property keinen wert enthält und somit bei einer serialisierung keine rolle spielt, das ist auch der grund warum man das NonSerialized attribute ihnen nicht geben kann.

    tolio schrieb:

    das ein property keinen wert enthält
    Auch 0 (Null) und Nothing sind ein Wert im Sinne einer Property.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    ich glaube ihr versteht meinen punkt nicht, vllt drücke ich mir ja auch missverständlich aus, aber im sinne der implementation enthält ein Property kein wert, wenn man den getter aufruft erhält man mit sicherheit einen wert aber dieser hat bis auf den type keinen zusammenhang mit dem property

    schauen wir uns doch einfach ein mininalbeispiel an, ich sehe hier kein wert der sich dem property zuordnen lässt und somit bei einer serialisierung gespeichert werden müsste

    C#-Quellcode

    1. .assembly Prop {}
    2. .assembly extern mscorlib {}
    3. .class TestClass
    4. {
    5. .property int32 TestProperty()
    6. {
    7. .get instance int32 TestClass::get_TestProperty()
    8. .set instance void TestClass::set_TestProperty(int32)
    9. }
    10. .method public int32 get_TestProperty()
    11. {
    12. ldc.i4.0
    13. ret
    14. }
    15. .method public void set_TestProperty(int32 x)
    16. {
    17. ret
    18. }
    19. }

    "ilasm Prop.il /dll"

    "peverify Prop.dll"

    Quellcode

    1. Microsoft (R) .NET Framework PE Verifier. Version 4.0.30319.33440
    2. Copyright (c) Microsoft Corporation. Alle Rechte vorbehalten.
    3. Alle Klassen und Methoden in Prop.dll best„tigt.