如何序列化动态对象?

时间:2011-08-04 20:07:05

标签: c# .net wcf

我想制作配置数据管理器。这将允许多个服务存储和访问所有这些服务共有的配置数据。 出于Manager的目的,我决定创建一个配置类对象 - 基本上每个配置数据条目都是这样的: 名称,类型和值。

在对象中,这些都是描述配置数据对象本身的字符串。一旦它将这些数据从其数据库中获取为字符串,它就会将其放入此配置对象中。

然后,我希望它通过WCF发送到目的地。但是,我不想发送配置对象的序列化版本,而是发送配置对象的描述的序列化版本。

我想这样做的原因是

  1. 数据管理器不需要了解有关配置数据的任何信息。
  2. 因此,我可以轻松添加配置对象,而无需更改服务。当然,我应该能够完成所有的CRUD操作,而不仅仅是阅读。
  3. 要点: 输入:名称,类型和值的字符串

    输出:对象的序列化输出;对象本身是“type name = value”

    问题:

    1. 这是存储和访问数据的好方法吗?
    2. 我怎样才能以这种方式序列化?
    3. getConfigurationData方法的函数原型是什么样的?
    4. 我决定向不同的方向前进,谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

  

这是存储和访问数据的好方法吗?

这很难回答,我能给你的最好的是“是”和“否”。是的,隔离这些数据的序列化/补液并不是一个坏主意....不,我并不太关心你描述它的方式。我不确定我是否希望它存储在文本中,除非我打算手工编辑它,如果我手动编辑它,我不确定我是否想在数据库中使用它。它可以做到;只是不确定你是否真的走在正确的轨道上。

  

我怎样才能以这种方式序列化?

不要建立自己的,不是那样的。使用已存在的已知格式。 XML或JSON将用于手动编辑,或者如果您不需要编辑它,则可以使用多种二进制格式(BSON,protobuffers)。

  

getConfigurationData方法的函数原型是什么样的?

我首先将'通用'又称常用配置分解为来自特定于服务的配置的单独调用。这使getConfigurationData能够简单地返回富类型以获取公共信息。然后为服务特定数据添加额外的参数和属性,或添加其他方法。举个例子:

[DataContract]
public class ConfigurationInfo
{
    [DataMember]
    public string Foo;
    ...
    // This string is a json/xml blob specific to the 'svcType' parameter
    [DataMember]
    public string ServiceConfig;
}

[DataContract]
public interface IServiceHost
{
    ConfigurationInfo GetConfigurationData(string svcType);
}

显然你给调用者一点负担来解析'ServiceConfig';但是,您的服务器可以将其视为不透明的字符串值。唯一的工作就是将它与适当的svcType相关联并存储/获取正确的值。