Custom Settings



  • Ich versuche eine eigene Klasse über die Settings-Klasse zu serialisieren. Daz habe ich folgende Testklasse:

    namespace ConsoleApplication {
    public Daten {
      public Daten() {
      }
    
      string str;
      string Str {
        get;
        set;
      }
    }
    }
    

    In der Designeroberfläche der Settings wähle ich als Typ meine Klasse aus: "ConsoleApplication.Daten".
    Ich kann jedoch keine Änderung im Werte Feld erkennen bzw. es ist immer noch das normale Feld vorhanden.
    Was habe ich vergessen?

    Das gewünschte Aussehen in der app.config sollte (letztendlich mit Array) so aussehen:

    <setting name="Daten" serializeAs="Xml">
      <value>
        <ArrayOfDaten xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
          <Daten>
            <Str>0</Str>
          </Daten>
        </ArrayOfDaten>
      </value>
    </setting>
    


  • evtl brauchst du das [Serializable] attribut ?
    kannst in dem zuge auch gleich ISerializable (weiss grad nicht ob man das so schreibt) implementieren um daten lesen und schreiben zu lassen (aber glaub ich nicht notwendig bei bereits serialisierbaren daten elementen)



  • Bei bereits serialisierbaren Datentypen wie string, double... ist die Klasse implizit serialisierbar.



  • Zickedi schrieb:

    Bei bereits serialisierbaren Datentypen wie string, double... ist die Klasse implizit serialisierbar.

    Wie kommst Du darauf?



  • In Thread (2) gab es diese Antwort. In Artikel (1) steht zumindest, dass "Klassen, die ICollection oder IEnumerable implementieren" serialisierbar sind. string implementiert IEnuerable.

    (1) http://msdn.microsoft.com/en-us/library/182eeyhh(de-de).aspx
    (2) http://bytes.com/groups/net-c/591269-storing-custom-classes-user-settings



  • aber die klasse die das string property beinhaltet implementiert nichts davon {o;



  • Gut, aber die Antwort hilft mir nicht weiter.
    Die Schnittstellenimplementierung hat's nicht wirklick gebracht. Die Oberfläche im Designer wird nicht entsprechend auf meine Custom-Klasse aktualisiert.

    Hat hier schon jemand eine eigene Klasse zum Laufen gebracht?



  • wir den die klasse richtig gespeichert ? evtl ist das problem das aktualisieren der ui ?!

    ich selber benutzt die application settings nie, ich hab immer eine eigene klasse wo ich werte in eine hashtable pack und diese dann serialisier (so kann ich bestimmen wohin)

    was ich schon schrieb ist eine SerializableSolidColorBrush classe, da solch ein brush per default nicht serialisierbar ist

    aber wie gefragt, evtl liegt bei dir das problem an der aktualisierung nicht am speichern der daten ?!



  • Ja, es scheint an der VisualStudio Umgebung zu liegen. Ein Neustart von VS aktualisiert den Designer manchmal wieder.
    Die Empfehlung ist einen TypeConverter oder als Fallback den XMLSerializer einzusetzen. Mit Letzterem ist der Designer aber auch nicht stabil, d.h. programmatisch klappt es, aber die Darstellung im Designer passt nicht.



  • wird die ui denn aktualisiert wenn das programm laeuft? genau darauf kommt es doch an

    ich finds komisch das du von ui aenderungen in vs aus gehst wenn du settings programatisch aenderst /=



  • Ich will sie im Designer als auch in Code ändern können. Gerade bei Neuanlegen von Einstellungen wäre der Designer ganz praktisch. Da aber die eigenen Klassen nur als XML-Text im Designer dargestellt werden, kann ich auch gleich die config editieren. Der komfortable Zugriff auf die Properties meiner Klasse über den Designer ist praktisch nicht möglich. 😞



  • ist doch normal, da viele settings erst zur laufzeit definitiv sind (der user hatts eingestellt) sind mehrere moeglichkeiten zur auswahl - und das geht halt nicht

    da gibts aber bestimmt auch noch workarounds
    zb elemente im designer ausblenden, andere ein, eine dummy solution wo du andere sachen ausprobierst usw usf


Log in to reply