如何通过WCF发送System.Configuration.Configuration对象

时间:2010-10-21 13:35:45

标签: .net wcf serialization system.configuration

嗯,我觉得这个标题解释不了。

我正在尝试通过电线导出配置对象,但它看起来很困难,类不可序列化......它是密封的,所以这里没有遗产。

任何人之前都做过这样的事情吗?

此致

3 个答案:

答案 0 :(得分:0)

你必须把你真正需要的部分拿出来,把它们放到一个可序列化的单独的类中,并且具有[DataContract][DataMember]属性用于WCF序列化,然后你需要做反向在另一端。

WCF仅传输数据 - 以XML格式序列化。如果你不能按原样序列化你的数据,你需要自己解决这个问题 - 没有灵丹妙药可以用另一种方式来解决......

为了减轻将大量属性从一个类复制到另一个类的痛苦,我建议使用像AutoMapper这样的库来消除很多无聊的重复代码,从一个对象分配给另一个对象。< / p>

答案 1 :(得分:0)

该类更像是访问应用程序配置文件的传递方式。序列化它并没有多大意义,但您可能想要做的是将值从中拉出并将它们填充到您控制的新类中。然后你要做的就是确保新类是可序列化的。

答案 2 :(得分:0)

我觉得我找到了解决这个问题的好方法。它通过序列化部分而不是Configuration对象本身来传递。 因此,为了确保我需要的所有部分一起进行序列化/反序列化,我将它们全部包装在一个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);
    }
}        

希望它有所帮助...

此致