Часто структуры данных не являются строго иерархическими. Например, рассмотрим команда, состоящая из игроков, и отмечая один из тех игроков, как капитан:Смешать вложенные и ссылочные элементы в XML-сериализации
Если бы я сериализовать экземпляр этой модели в XML, я бы ожидать некоторую структуру, как:
<Team id="team1">
<Players>
<Player id="player1"/>
<Player id="player2"/>
<Player id="player3"/>
<Player id="player4"/>
</Players>
<Captain ref="player3"/>
</Team>
То есть агрегация сериализуется как вложенные элементы, а направленная ассоциация сериализуется со ссылкой на идентификатор.
Я хотел бы добиться этого с C# код без необходимости писать пользовательские сериализаторы XML, предпочтительно, просто добавив атрибут, что-то вроде:
class Team
{
public List<Player> Players { get; set; }
[XmlReference]
public Player Captain { get; set; }
}
Существует ли что-нибудь подобное? Я взглянул на схему XML, но, похоже, он не обеспечивает то, что мне нужно здесь.
Bonus: Было бы еще лучше, если бы я мог генерировать промежуточные C# код, с соответствующими атрибутами, установленных непосредственно из UML - или любого другого моделирование формализма по этому вопросу. В конце концов, я просто хочу указать тип ассоциации на высоком уровне абстракции и обеспечить соответствие сериализации XML этому, с наименьшим количеством усилий/места для ошибок.
Вы можете ввести капитан-класс с имущественным исх, что вы сериализовать как атрибут вместо элемента (делать это потребует XmlAttribute-атрибут) – HimBromBeere
вы не возражаете, что XML на самом деле выглядит? 'DataContractSerializer' предлагает это с помощью свойства IsReference (и, как правило, имеет лучшую производительность). –