实现通用对象结构(属性包)

时间:2010-01-27 16:49:27

标签: c# .net oop dynamic

我们需要实现一些通用的对象结构,就像动态语言中的对象一样,这样我们就可以在运行中创建整个对象图。这个类必须是可序列化的,并且用户友好。

到目前为止,我们已经使用点符号路径从Dictionary<string, object>派生的类进行了一些实验,以在对象树中存储属性和集合。我们还发现article实现了类似的东西,但它似乎也不完全适合我们的图片。

你知道一些处理类似问题的好的实现/库,或者你有任何(非平凡的)想法可以帮助我们实现自己的实现吗?

另外,我可能不得不说我们使用的是.NET 3.5,因此我们无法利用.NET 4.0中的新功能,如动态类型等(据我所知,它也无法使用) .NET 3.5解决方案中的任何子集)。

3 个答案:

答案 0 :(得分:3)

一个易于动态添加属性(以分层方式)和序列化的类是XDocument

除非你转到.Net 4,否则你不会更容易使用。

我特别喜欢他们添加显式强制转换操作符的方式:

XElement address = d.Element("Address");
int number = (int)address.Attribute("Number");

答案 1 :(得分:2)

过去我已经完成了属性包实现,包括ICustomTypeDescriptor / ITypedList之类的所有muck以使其绑定 - 并且它可以是很多工作。特别是如果你包括序列化(不包括BinaryFormatter,它有自己的问题)。

这种类型的动态对象确实非常适合一般静态类型语言(如C#),但它可以使用。虽然我不是他们最忠实的粉丝(甚至不是一点点),但你可以在这里使用DataTable / DataRow吗?如果没有大量的工时开发/调试,它就会按照您的要求进行操作。

答案 2 :(得分:0)

请查看此CodeProject文章,其中介绍了如何设置要与属性网格here以及here一起使用的属性包。我使用过这些,因为强调了你关于财产袋的问题。

希望这有帮助, 最好的祝福, 汤姆。