【问题标题】:How to send a System.Configuration.Configuration object trough WCF如何通过 WCF 发送 System.Configuration.Configuration 对象
【发布时间】:2010-10-21 13:35:45
【问题描述】:

嗯,我认为标题本身就说明了问题。

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

以前有人做过这样的事情吗?

问候

【问题讨论】:

  • 我很好奇您为什么要这样做,因为配置将是特定于应用程序的。
  • 我正在开发客户端服务器解决方案,并将客户端作为 GUI 来构建服务器配置。还需要将某些配置部分导出到另一台机器。

标签: .net wcf serialization system.configuration


【解决方案1】:

您必须提取出您真正需要的位,将它们放入可序列化的单独类中,并具有用于 WCF 序列化的 [DataContract] 和 [DataMember] 属性,然后您需要在另一端执行相反的操作.

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

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

【讨论】:

  • 好吧,我试图避免再次创建所有对象。甚至使用工具。首先,我将尝试对这些部分进行序列化。如果它不起作用。那我就去吧……
【解决方案2】:

该类更像是访问应用程序配置文件的通道。序列化它并没有多大意义,但您可能想要做的是从中提取值并将它们填充到您控制的新类中。那么你所要做的就是确保新类是可序列化的。

【讨论】:

    【解决方案3】:

    我想我找到了解决这个问题的好方法。它通过序列化部分而不是 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);
        }
    }        
    

    希望对某人有所帮助...

    问候

    【讨论】:

      猜你喜欢
      • 2011-02-13
      • 1970-01-01
      • 1970-01-01
      • 2011-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多