Как сериализовать тип, полученный из 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 с вашим сериализатором