【问题标题】:Implementation of a general-purpose object structure (property bag)通用对象结构(属性包)的实现
【发布时间】:2010-04-03 16:08:08
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: c# .net oop dynamic


    【解决方案1】:

    我过去已经完成了 property-bag 的实现,包括所有像 ICustomTypeDescriptor / ITypedList 这样的垃圾来让它绑定 - 这可能是一个很多的工作。特别是如果您包含序列化(不包括 BinaryFormatter,它有其自身的问题)。

    这种类型的动态对象真的不太适合一般像 C# 这样的静态类型语言,但它可以工作。虽然我不是他们最大的粉丝(甚至不是一点点),但你能不能在这里使用DataTable/DataRow?它可以满足您的要求,无需大量工时开发/调试。

    【讨论】:

      【解决方案2】:

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

      除非你迁移到 .Net 4,否则你不会变得更容易使用。

      我特别喜欢他们添加显式转换运算符的方式:

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

      【讨论】:

        【解决方案3】:

        查看这篇 CodeProject 文章,该文章解释了如何设置属性包以与属性网格 herehere 一起使用。我使用这些是因为您的问题与财产包有关。

        希望这会有所帮助, 此致, 汤姆。

        【讨论】:

        • 第二个和我发的一样。但我会检查第一个,谢谢;)
        猜你喜欢
        • 1970-01-01
        • 2019-04-01
        • 2018-04-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多