Реализация объектной структуры общего назначения (пакет свойств) - PullRequest
3 голосов
/ 27 января 2010

Нам нужно реализовать некоторую объектную структуру общего назначения, очень похожую на объект в динамических языках, которая дала бы нам возможность создавать весь граф объектов на лету. Этот класс должен быть сериализуемым и как-то удобным для пользователя.

До сих пор мы провели несколько экспериментов с классом, производным от Dictionary<string, object>, используя путь точечной нотации для хранения свойств и коллекций в дереве объектов. Мы также нашли статью , в которой реализовано нечто подобное, но, похоже, она не полностью вписывается в нашу картину.

Знаете ли вы о некоторых хороших реализациях / библиотеках, которые имеют дело с подобной проблемой, или у вас есть (нетривиальные) идеи, которые могли бы помочь нам в нашей собственной реализации?

Кроме того, я, вероятно, должен сказать, что мы используем .NET 3.5, поэтому мы не можем воспользоваться новыми функциями .NET 4.0, такими как динамический тип и т. Д. (Насколько я знаю, это также невозможно использовать любое его подмножество в решении .NET 3.5).

Ответы [ 3 ]

3 голосов
/ 27 января 2010

Один класс, в который можно легко динамически добавлять свойства (в иерархическом порядке) и сериализовать, - XDocument.

Вам не будет намного проще пользоваться, если вы не перейдете на .Net 4.

Мне особенно нравится, как они добавили явные операторы приведения:

XElement address = d.Element("Address");
int number = (int)address.Attribute("Number");
2 голосов
/ 27 января 2010

В прошлом я реализовывал пакеты свойств, включая всю эту грязь, такую ​​как ICustomTypeDescriptor / ITypedList, чтобы связать ее - и это может быть лот работы. Особенно, если вы включите сериализацию (не включая BinaryFormatter, которая имеет свои проблемы).

Этот тип динамического объекта не действительно очень хорошо вписывается в обычно статически типизированный язык, такой как C #, но его можно заставить работать. Хотя я не их самый большой поклонник (даже не маленький), не могли бы вы просто использовать DataTable / DataRow здесь? Он делает то, что вы просите, без многих человеко-часов разработки / отладки.

0 голосов
/ 27 января 2010

Ознакомьтесь с этой статьей CodeProject, в которой объясняется, как настроить пакет свойств для использования с сеткой свойств здесь , а также здесь . Я использовал их, так как ваш вопрос касался сумки с недвижимостью.

Надеюсь, это поможет, С наилучшими пожеланиями, Том.

...