c# - E pluribus unum : merge objects into one

标签 c# .net

我有一个预定义的数据格式,这要求我有一个像这样的对象:

settings:{
    settingA:'someValueFromSql',
    settingB:'someValueFromAD'
    settingC:'someValueFromConfigFile',
    settingD:'someValueFromReflection',
    settingE:42,
    ...
}

这个settings对象实际上是从许多不同来源拼接在一起的一大堆数据,但这就是前端期望数据的方式。我想将“获取/处理来自一个源的所有数据”分别放在一个函数中,最后将对象粘在一起。

所以我会有一个对象

sqlSettings:{
    settingA:'someValueFromSql',
    settingG:'someOtherValueFromSql',
    ...
}

由函数a返回,以及一个对象

adSettings:{
    settingB:'someValueFromAD',
    settingV:'someOtherValueFromAD',
    ...
}

由函数b返回,以及一个对象

settings includes adSettings, sqlSettings

最多只需两个简单的步骤,我就可以将两个对象“连接在一起”形成一个平面的第三个对象。

这对于固定大小的对象来说是可能的,而不使用通用字典,还是我找错了树?

(我确信这个问题已经在 SO 上被问过,但我想我找不到合适的词)

最佳答案

使用“普通”对象是不可能的,但你可以使用 ExpandoObject 来做到这一点和 dynamic keyword 。但你至少需要.net 4.0

dynamic settings = new ExpandoObject();
//If you try to assign a property that doesn't exist, it is added to the object.
settings.SettingA="sfgd" 

无论如何,我不鼓励使用这种方法。为什么你不想使用 IDictionary<string, object>或更好 IDictionary<string, MyCustomSettingObject>

--------------------更新---------------------

如果阻止您使用字典的唯一原因是序列化,您可以实现 IXmlSerializable Interface并输出你喜欢的xml:

Proper way to implement IXmlSerializable?

关于c# - E pluribus unum : merge objects into one,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25990440/

相关文章:

c# - 为什么当 WPF TextBox 无效时 ViewModel 没有得到更新?

c# - 更改 Action 对象实例的参数

c# - Entity-Framework中自动查询结果

.net - 将参数传递给 .NET 定义的命令

.net - IIS应用程序池随机崩溃是由堆栈溢出引起的

c# - 如何使用一个固定参数和集合中的另一个参数编写 Parallel.ForEach?

c# - 使用 Excel Interop 删除空行

c# - 使用 .NET 解析类似 "Wednesday 13th January 2010"的日期

c# - 如何使用 DataContractJsonSerializer 反序列化字典?

c# - 从 ASP.NET Core 中的 Controller 操作运行后台任务