У меня есть класс, который когда сериализовать в XML выглядит следующим образом (обобщенно для простоты):Как избежать создания нескольких экземпляров объекта с десериализацией XML?
<root>
<resources>
<resource name="foo" anotherattribute="value">data</resource>
<resource name="bar" anotherattribute="value">more data</resource>
</resource>
<myobject name="objName">
<resource name="foo" />
</myobject>
</root>
Когда это десериализации, мне нужен экземпляр resource
ссылается свойство экземпляра myobject
быть тот же объект, созданный во время десериализации коллекции resources
. Кроме того, если возможно, я не хочу выводить полную сериализацию экземпляра resource
в myobject
, только имя.
Есть ли способ сделать это? Прямо сейчас я рассматриваю возможность использования отдельного свойства строки для целей сериализации, которое получает соответствующий объект от root
, когда десериализатор устанавливает свойство, но это означает предоставление myobject
ссылки на root
, который содержит его, и я надеялся избежать это сцепление.
Проблема здесь состоит в том, что полный десериализации 'resource' объекты должны находиться в пределах' resources' тега, никогда в 'myobject' тега. Я подозреваю, что это, вероятно, легко отсортировать, просто удостоверившись, что «ресурсы» сначала сериализованы. Кроме того, у меня не может быть дополнительных атрибутов для Id и Ref, он уже получил имя для использования в качестве ссылки. – Flynn1179
Действительно, вы можете изменить порядок, в котором свойства сериализованы. И, как я уже сказал, это решение работает только в том случае, если вам не нужна схема XML ... Если вы хотите, чтобы это было точно так, как вы описали в своем вопросе, я думаю, вам придется обрабатывать сериализацию вручную, реализуя IXmlSerializable –