Как сериализовать тип, полученный из ConfigurationSection, с помощью NetDataContractSerializer

Я написал свой тип, полученный из ConfigurationSection помечены все свойства с DataMember и класс с DataContract, однако программа вылетает, заявляя, что я не могу наследовать свой тип от типа, который не отмечен DataContract,

Так как я мог использовать этот сериализатор с 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
}

2 ответа

Решение

Есть и другой способ - вместо того, чтобы полагаться на автоматическую сериализацию, напишите свою собственную сериализацию вручную. поскольку NetDataContractSerializer поддерживает его, вы можете получить только один тип с 2 дополнительными методами (точнее: дополнительный метод для сериализации и конструктор для десериализации).

Как, например, см. Пост: При использовании ISerializable с DataContractSerializer, как остановить сериализатор от вывода информации о типе?

Ну, я думаю, что если вы не можете использовать сериализатор с классом контракта, не связанным с данными, возможно, вам следует разделить свойства элемента данных в другой класс, который будет агрегирован в вашем 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
}

Чем вы можете сериализовать экземпляр CustomConfig с вашим сериализатором

Другие вопросы по тегам