У меня есть класс, который содержит ряд ресурсов, загружаемых из файлов. Хотите сериализовать объекты этого класса в XML, но с путями к ресурсам вместо самих ресурсов.

Прямо сейчас я обошел это, создав несколько полей ResourceSource, в которых хранится путь к ресурсу, и используя XMLIgnore для самих ресурсов. Однако они должны быть публичными, что не очень хорошо.

Казалось бы, что мне действительно нужно, так это иметь возможность создавать специальные средства доступа к свойствам, которые выполняются только XMLSerialize. Существует ли эта функция или есть способ ее реализовать?

Как вариант, могу ли я сделать поля ResourceSource доступными только для XMLSerialize?

1
Tom Savage 10 Апр 2011 в 21:25

2 ответа

Лучший ответ

Рассматривали ли вы вместо этого реализацию IXmlSerializable? Это позволяет более точно контролировать процесс сериализации.

Есть две причины реализовать этот интерфейс. Первый - контролировать сериализацию или десериализацию вашего объекта с помощью XmlSerializer. Например, вы можете разбить данные на байты вместо буферизации больших наборов данных, а также избежать инфляции, которая возникает, когда данные кодируются с использованием кодировки Base64. Чтобы управлять сериализацией, реализуйте методы ReadXml и WriteXml для управления классами XmlReader и XmlWriter, используемыми для чтения и записи XML.

Вторая причина - возможность управлять схемой. Чтобы включить это, необходимо применить атрибут XmlSchemaProviderAttribute к сериализуемому типу и указать имя статического члена, возвращающего схему.

1
Community 20 Июн 2020 в 12:12
Похоже, это то, что я хотел. Реализация этого в моих классах ресурсов делает то, что я хочу
 – 
Tom Savage
11 Апр 2011 в 01:33

Похоже, ваш класс перегружен, чтобы иметь несколько обязанностей, что почти всегда является сигналом того, что пришло время для некоторого рефакторинга.

Я бы хотел иметь один сериализуемый класс, в котором хранятся пути к ресурсам, и другой, который хранит сами ресурсы. Конструктор несериализуемого класса может принимать экземпляр сериализованного класса, загружать ресурсы с диска и т. Д.

0
Zack Elan 10 Апр 2011 в 21:39
Вы говорите, но я не думаю, что у моего класса несколько обязанностей. Я просто хочу, чтобы у моего класса был метод сохранения и загрузки и файлы, которые он сохраняет / загружает из, включают ссылки на другие файлы, а не на сами данные
 – 
Tom Savage
11 Апр 2011 в 00:11