Можно ли создать свойство с открытым геттером и защищенным сетевым устройством с помощью CodeDOM? Целью является достижение чего-то похожего на следующее.
[Serializable]
public class Wrapper {
public Wrapper() { }
private string _Field;
public string Field { get; protected set; }
}
У меня есть большой API на основе COM, для которого я хочу скомпилировать .NET-упаковку, поэтому было бы проще использовать такие функции .Net, как LINQ, Reflection, наследование и сериализацию. Единственный возможный способ - автоматизировать большие части этой работы с генерацией кода.
Эти объекты содержат некоторые свойства только для чтения, которые я хочу вынести через сериализацию, которая требует установки свойств. Но так долго я не нашел способов установить защищенную сеттеру или подобное.
Один из способов может заключаться в том, чтобы пометить свойство как не сериализуемое и сериализовать _Field, но поскольку одна цель для сериализованного вывода - это веб, мне нужно было бы связать частный член со всеми атрибутами сериализатора которые позволяют сериализатору использовать более чистое имя (без подчеркивания) для сериализации. По той же причине я считаю, что сериализация не возможна.
Не так уж важно, что я могу десериализировать его точно, т.е. не имеет значения, что значение остается в первоначальном значении во время/через десериализацию. Свойства читаются только для того, чтобы уменьшить путаницу, не позволяя потребителю API пытаться изменить поля только для чтения и задаться вопросом, почему они не влияют ни на что.
Просто оберните это. Невозможно сделать это в сохранении CodeDOM для вывода исходной строки.
И что происходит с XMLSerializer, сериализатор может сериализовать класс, но он не будет сериализовать значение с защищенным установщиком.
Так что это невозможно. Альтернативным способом, который я использовал, было создание метода ToSerializableType()
для каждого из этих классов, который возвращает экземпляр аналогичного класса, который имеет все свойства read/Write.