Публичный геттер, защищенный сеттер с CodeDOM

2

Можно ли создать свойство с открытым геттером и защищенным сетевым устройством с помощью CodeDOM? Целью является достижение чего-то похожего на следующее.

[Serializable]
public class Wrapper {
  public Wrapper() { }
  private string _Field;
  public string Field { get; protected set; }
}

У меня есть большой API на основе COM, для которого я хочу скомпилировать .NET-упаковку, поэтому было бы проще использовать такие функции .Net, как LINQ, Reflection, наследование и сериализацию. Единственный возможный способ - автоматизировать большие части этой работы с генерацией кода.

Эти объекты содержат некоторые свойства только для чтения, которые я хочу вынести через сериализацию, которая требует установки свойств. Но так долго я не нашел способов установить защищенную сеттеру или подобное.

Один из способов может заключаться в том, чтобы пометить свойство как не сериализуемое и сериализовать _Field, но поскольку одна цель для сериализованного вывода - это веб, мне нужно было бы связать частный член со всеми атрибутами сериализатора которые позволяют сериализатору использовать более чистое имя (без подчеркивания) для сериализации. По той же причине я считаю, что сериализация не возможна.

Не так уж важно, что я могу десериализировать его точно, т.е. не имеет значения, что значение остается в первоначальном значении во время/через десериализацию. Свойства читаются только для того, чтобы уменьшить путаницу, не позволяя потребителю API пытаться изменить поля только для чтения и задаться вопросом, почему они не влияют ни на что.

  • 0
    Гектометр XmlSerializer и JSON.Net JsonSerializer могут сериализовать его. Должно быть, я неправильно помнил, что сериализаторы обеспечивают возможность десериализации при запуске сериализации. Так что первоначальной проблемы никогда не было, но я все еще хотел бы услышать, возможно ли создание защищенного геттера с CodeDOM.
Теги:
serialization
codedom

1 ответ

1
Лучший ответ

Просто оберните это. Невозможно сделать это в сохранении CodeDOM для вывода исходной строки.

И что происходит с XMLSerializer, сериализатор может сериализовать класс, но он не будет сериализовать значение с защищенным установщиком.

Так что это невозможно. Альтернативным способом, который я использовал, было создание метода ToSerializableType() для каждого из этих классов, который возвращает экземпляр аналогичного класса, который имеет все свойства read/Write.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню