繁体   English   中英

如何序列化动态对象?

[英]How do I serialize a dynamic object?

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

在对象中,所有这些都是描述配置数据对象本身的字符串。 一旦从数据库以字符串形式获取了这些数据,便会将其放入此配置对象中。

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

我想这样做的原因是

  1. 数据管理器不需要了解任何有关配置数据的信息。
  2. 因此,我可以轻松添加配置对象,而无需更改服务。 当然,我应该能够执行所有CRUD操作,而不仅仅是阅读。

摘要:输入:名称,类型和值的字符串

输出:对象的序列化输出; 对象本身是“类型名称=值”

问题:

  1. 这是存储和访问数据的好方法吗?
  2. 我/如何以这种方式进行序列化?
  3. getConfigurationData方法的函数原型是什么样的?

感谢您的帮助,我决定朝另一个方向前进。

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

这很难回答,我能给你的最好的答案是“是”和“否”。 是的,隔离此数据的序列化/重新水化并不是一个坏主意。...而且不,我真的不太在乎您描述它的方式。 除非计划手动编辑,否则我不确定是否希望将其存储在文本中;如果手动编辑,我不确定是否希望将其存储在数据库中。 可以做到的; 只是不确定您是否真的在正确的轨道上。

我/如何以这种方式进行序列化?

不要自己建立,永远不要那样。 使用已经存在的众所周知的格式。 XML或JSON可用于手动编辑,或者,如果您不需要进行编辑,则可以使用几种二进制格式(BSON,原型缓冲区)。

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关联,并存储/获取正确的值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM