0

Ich schrieb meine Art von ConfigurationSection abgeleitet markierte alle Eigenschaften mit DataMember und Klasse mit DataContract jedoch Programm stürzt die besagt, ich kann meine Art von einem Typ nicht erben, die nicht mit DataContract markiert.Wie Art von Configuration mit NetDataContractSerializer abgeleitet serialisiert

Also wie könnte ich diesen Serializer mit ConfigurationSection verwenden?

[DataContract] 
public sealed class MyConfig : ConfigurationSection 
{ 
    [DataMember] 
    [ConfigurationProperty("ConnectionTimeout", DefaultValue = 1000)] 
    public int ConnectionTimeout 
    { 
     get { return (int)this["ConnectionTimeout"]; } 
     set { this["ConnectionTimeout"] = value; } 
    } 
    ... // other values 
} 
+0

uns –

+0

@ Übercoder einige Code Bitte zeigen, um das Update sehen. – astrowalker

Antwort

0

Es gibt einen anderen Weg - anstatt auf automatische Serialisierung angewiesen zu sein, schreiben Sie Ihre benutzerdefinierte Serialisierung manuell. Da NetDataContractSerializer es unterstützt, können Sie nur mit einem einzigen Typ mit 2 zusätzlichen Methoden (genauer: zusätzliche Methode für die Serialisierung und Konstruktor für Deserialisierung) enden.

Wie zum Beispiel finden Sie in der Post: When using ISerializable with DataContractSerializer, how do I stop the serializer from outputting type information?

2

Nun, ich denke, wenn Sie die Serializer mit nicht Datenvertrag-Klasse verwenden, können nicht als vielleicht sollten Sie Datenelementeigenschaften in einer anderen Klasse trennen, die in ihrem Configuration aggregiert werden:

[DataContract] 
public sealed class CustomConfig 
{ 
    [DataMember] 
    public int ConnectionTimeout {get;set;} 
} 

public sealed class MyConfig : ConfigurationSection 
{ 
    private CustomConfig _customCfg = new CustomConfig(){ConnectionTimeout = this.ConnectionTimeout}; 

    [ConfigurationProperty("ConnectionTimeout", DefaultValue = 1000)] 
    public int ConnectionTimeout 
    { 
     get { return (int)this["ConnectionTimeout"]; } 
     set { _customCfg.ConnectionTimeout = value;this["ConnectionTimeout"] = value; } 
    } 
    ... // other values 
} 

als Sie serialisieren CustomConfig-Instanz mit Ihrem Serializer

+0

Für jetzt benutze ich etwas ähnliches, ich erstelle Wrapper-Typ, der genau die gleichen Werte hat, bei der Erstellung kopiert dieser Wrapper alle Werte vom Typ 'config'. Dies sind jedoch Implementierungsdetails, ein fragiler Punkt ist, Sie vergessen einmal zu kopieren und Sie haben einen Standardwert im Zieltyp. Ich suche also etwas Automatischeres. – astrowalker

+1

Vielleicht als Reflexion verwenden, um Eigenschaften zu kopieren? Als wenn Sie neue Eigenschaften hinzufügen, werden sie automatisch kopiert. – VitaliyK

+0

Vielen Dank, gute Idee. Ich warte ein bisschen, wenn ich nichts finde, werde ich diesen Weg gehen (und deine Antwort akzeptieren), ok? – astrowalker

Verwandte Themen