0

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

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

Пожалуйста, покажите нам код –

+0

@ Übercoder см обновление. – astrowalker

ответ

0

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

Как, например, увидеть сообщение: When using ISerializable with DataContractSerializer, how do I stop the serializer from outputting type information?

2

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

+0

На данный момент я использую нечто подобное, я создаю тип-оболочку, который имеет точно такие же значения, при создании этой оболочки копирует все значения из типа 'config'. Однако это детали реализации, одна хрупкая точка - вы забываете о копировании, и у вас будет значение по умолчанию в целевом типе. Поэтому я ищу что-то более автоматическое. – astrowalker

+1

Возможно, чем использовать отражение для копирования свойств? Если вы добавите новые свойства, они будут автоматически скопированы. – VitaliyK

+0

Спасибо, хорошая идея. Я немного подожду, если я не найду ничего, я поеду по этому маршруту (и приму свой ответ), хорошо? – astrowalker