J'ai écrit mon type dérivé de ConfigurationSection étiqueté toutes les propriétés avec DataMember et la classe avec DataContract, mais le programme se bloque indiquant que je ne peux pas hériter de mon type d'un type qui n'est pas marqué avec {{X3} }.

Alors, comment puis-je utiliser ce sérialiseur avec ConfigurationSection?

[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
astrowalker 17 janv. 2017 à 16:05

2 réponses

Meilleure réponse

Il existe un autre moyen: au lieu de vous fier à la sérialisation automatique, écrivez manuellement votre sérialisation personnalisée. Puisque NetDataContractSerializer le prend en charge, vous pouvez vous retrouver avec un seul type avec 2 méthodes supplémentaires (plus précisément: méthode supplémentaire pour la sérialisation et constructeur pour la désérialisation).

Comme par exemple, voir l'article: Quand en utilisant ISerializable avec DataContractSerializer, comment puis-je empêcher le sérialiseur de générer des informations de type?

0
Community 23 mai 2017 à 12:08

Eh bien, je suppose que si vous ne pouvez pas utiliser le sérialiseur avec une classe de contrat sans données, vous devriez peut-être séparer les propriétés des membres de données dans une autre classe qui sera agrégée dans votre ConfigurationSection:

[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
}

Ensuite, vous pouvez sérialiser l'instance CustomConfig avec votre sérialiseur

2
VitaliyK 17 janv. 2017 à 13:33