У меня есть класс, который содержит ряд ресурсов, загружаемых из файлов. Хотите сериализовать объекты этого класса в XML, но с путями к ресурсам вместо самих ресурсов.
Прямо сейчас я обошел это, создав несколько полей ResourceSource
, в которых хранится путь к ресурсу, и используя XMLIgnore
для самих ресурсов. Однако они должны быть публичными, что не очень хорошо.
Казалось бы, что мне действительно нужно, так это иметь возможность создавать специальные средства доступа к свойствам, которые выполняются только XMLSerialize. Существует ли эта функция или есть способ ее реализовать?
Как вариант, могу ли я сделать поля ResourceSource
доступными только для XMLSerialize?
2 ответа
Рассматривали ли вы вместо этого реализацию IXmlSerializable? Это позволяет более точно контролировать процесс сериализации.
Есть две причины реализовать этот интерфейс. Первый - контролировать сериализацию или десериализацию вашего объекта с помощью XmlSerializer. Например, вы можете разбить данные на байты вместо буферизации больших наборов данных, а также избежать инфляции, которая возникает, когда данные кодируются с использованием кодировки Base64. Чтобы управлять сериализацией, реализуйте методы ReadXml и WriteXml для управления классами XmlReader и XmlWriter, используемыми для чтения и записи XML.
Вторая причина - возможность управлять схемой. Чтобы включить это, необходимо применить атрибут XmlSchemaProviderAttribute к сериализуемому типу и указать имя статического члена, возвращающего схему.
Похоже, ваш класс перегружен, чтобы иметь несколько обязанностей, что почти всегда является сигналом того, что пришло время для некоторого рефакторинга.
Я бы хотел иметь один сериализуемый класс, в котором хранятся пути к ресурсам, и другой, который хранит сами ресурсы. Конструктор несериализуемого класса может принимать экземпляр сериализованного класса, загружать ресурсы с диска и т. Д.
Похожие вопросы
Новые вопросы
c#
C# (произносится как «see Sharp») — это высокоуровневый мультипарадигменный язык программирования со статической типизацией, разработанный Microsoft. Код C# обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, которое включает в себя .NET, .NET Framework, .NET MAUI и Xamarin среди прочих. Используйте этот тег для ответов на вопросы о коде, написанном на C#, или о формальной спецификации C#.