Как отправить объект System.Configuration.Configuration через WCF - PullRequest
0 голосов
/ 21 октября 2010

Ну, я думаю, что заголовок объясняет сам по себе.

Я пытаюсь экспортировать объект конфигурации через провод, но это выглядит довольно сложно, класс не сериализуем и ... он запечатан, поэтомуздесь нет наследия.

Как кто-то делал что-то подобное раньше?

С уважением

Ответы [ 3 ]

0 голосов
/ 21 октября 2010

Этот класс является более сквозным для доступа к файлу конфигурации приложения.Сериализация этого не имеет особого смысла, но вы можете извлечь из него значения и вставить их в новый класс, которым вы управляете.Тогда все, что вам нужно сделать, это убедиться, что новый класс сериализуем.

0 голосов
/ 28 октября 2010

Ну, я думаю, что нашел хорошее решение для этой проблемы.Он проходит путем сериализации разделов вместо самого объекта конфигурации.Итак, чтобы все разделы, которые мне нужны, были объединены в сериализованную / десериализованную версию, я поместил их в одну группу ConfigurationSectionGroup.Я делаю эту работу и позволяет мне экспортировать и импортировать настройки через службу WCF или непосредственно в файле.Вот код, который я использовал:

Базовый класс раздела конфигурации:

public abstract class ConfigurationSectionBase : ConfigurationSection
{
    public string Serialize()
    {
        return SerializeSection(null, Name, ConfigurationSaveMode.Minimal);
    }

    public void Deserialize(string configuration)
    {
        XmlReader reader = XmlReader.Create(new StringReader(configuration));
        if (!reader.ReadToFollowing(Name)) return;
        StringBuilder stringBuilder = new StringBuilder().Append(reader.ReadOuterXml());
        var stringReader = new StringReader(stringBuilder.ToString());
        reader = XmlReader.Create(stringReader);
        DeserializeSection(reader);
    }
}        

Надеюсь, это кому-нибудь поможет ...

С уважением

0 голосов
/ 21 октября 2010

Вам нужно будет извлечь нужные биты, поместить их в отдельный класс, который можно сериализировать и который будет иметь атрибуты [DataContract] и [DataMember] для сериализации WCF, а затем вам нужно сделать обратное на другом конце. .

WCF передает только данные - сериализованные в формате XML. Если вы не можете сериализовать ваши данные как есть, вам нужно обойти их самостоятельно - нет волшебной палочки, чтобы решить эту проблему другим способом ...

Чтобы облегчить копирование множества свойств из одного класса в другой, я бы порекомендовал использовать такую ​​библиотеку, как AutoMapper , которая может устранить множество скучных, повторяющихся кодов, назначаемых из одного объекта в другой. .

...