我有一个预定义的数据格式,这要求我有一个像这样的对象:
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:
关于c# - E pluribus unum : merge objects into one,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25990440/