Я использовал и расширил метаданные для большей части своих проектов, многие из которых касались описания компонентов, связей между ними, отображений и т. Д.
(Основные категории широко используемых атрибутов включают O / R Mappers, инфраструктуру внедрения зависимостей и описание сериализации - особенно XML-сериализация)
Хорошо, я попрошу вас немного подробнее рассказать о природе данных, которые вы хотите встроить в качестве ресурса. Использование атрибутов, естественно, хорошо для типа данных, которые описывают ваши типы и элементы типов, но каждое использование атрибутов является простым и коротким. Атрибуты (я думаю) должны быть очень связными и как-то независимыми друг от друга.
Одним из решений, на которое я хочу вам указать, является подход «Сериализация XML». Вы можете сохранить свои текущие XML-файлы и поместить их в свои сборки как Embedded Resource (что вы, вероятно, уже сделали) и сразу прочитать весь XML-код в строго типизированную иерархию объектов.
Сериализация XML очень проста в использовании, на мой взгляд, намного проще, чем типичный XML API или даже LINQ2XML. Он использует атрибуты для сопоставления свойств класса с элементами XML и атрибутами XML. После того, как вы загрузили XML в объекты, у вас в памяти есть все, что вы хотите, в виде «типизированных» данных.
Исходя из того, что я понимаю из вашего описания, я думаю, что у вас есть много данных для размещения в одном классе. Это означает большой и (на мой взгляд) некрасивый код атрибута над классом. (Если вы не можете распределять свои данные среди участников, делая каждого из них маленьким и независимым, что приятно.)
У меня много положительного опыта использования XML-сериализации для большого количества данных. Вы можете упорядочивать данные по своему усмотрению, вы получаете безопасность типов, вы получаете IntelliSence (если вы отдаете XSD визуальной студии), а также вы получаете половину Рефакторинга. ReSharper (или любой другой известный мне инструмент рефакторинга) не распознает сериализацию XML, поэтому, когда вы реорганизуете типизированные классы, он не меняет сам XML, а меняет все использование данных.
Если вы дадите мне более подробную информацию о ваших данных, я мог бы кое-что добавить к своему ответу.
Для примеров сериализации XML, просто Google "Сериализация XML" или посмотрите его в MSDN.
UPDATE
Я настоятельно рекомендую НЕ использовать классы для представления экземпляров ваших данных. Или даже использование класса для инкапсуляции данных противоречит их логическому определению.
Полагаю, лучшим вариантом будет сериализация XML при условии, что у вас уже есть данные в формате XML. Вы получаете все преимущества, которые хотите, с меньшим количеством кода. И вы можете выполнить любой запрос к сериализуемым объектам XML, используя LINQ2Objects.
Часть вашего кода может выглядеть следующим образом:
[XmlRoot]
public class MyMetadata
{
[XmlElement]
public Group[] Groups { get; set; }
}
public class Group
{
[XmlAttribute]
public string Name { get; set; }
[XmlAttribute]
public int SomeNumber { get; set; }
[XmlElement]
public Widget[] Widgets { get; set; }
}
public class Widget
{
...
}
Вы должны вызвать new XmlSerializer(typeof(MyMetadata))
, чтобы создать сериализатор, и вызвать его Deserialize
метод, передав ему поток вашего XML, и вы получите заполненный экземпляр класса MyMetadata
.