Pregunta

¿Es posible generar una propiedad con un getter público y un setter protegido con CodeDOM? El objetivo es lograr algo similar a lo siguiente.

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

Tengo una gran API basada en COM para la cual deseo compilar un contenedor .Net para que sea más fácil usar características .Net como LINQ, Reflection, herencia y serialización. La única forma factible es automatizar grandes partes de este trabajo con la generación de código.

Estos objetos contienen algunas propiedades de solo lectura que deseo exponer a través de la serialización que requiere un configurador de propiedades. Pero durante tanto tiempo no he encontrado ninguna manera de configurar el setter protegido o similar.

Una forma podría ser marcar la propiedad como no serializable y serializar el _Field, pero dado que un objetivo para la salida serializada es web, necesitaría atribuir al miembro privado con todos los atributos de serializador posibles que indican al serializador que use un nombre más limpio (sin el guión bajo) para la serialización. Por la misma razón, creo que la serialización personalizada no es posible.

No es tan importante que pueda deserializarlo con precisión, es decir. No es crítico que el valor permanezca en su valor original durante / a través de la deserialización. Las propiedades se leen solo para reducir la confusión al evitar que el consumidor de API intente cambiar los campos de solo lectura y se pregunte por qué no tienen efecto en nada.

¿Fue útil?

Solución

Simplemente terminando esto. No hay forma de hacer esto en CodeDOM, salvo para la salida de cadena sin formato.

Y lo que viene a XMLSerializer es que el serializador puede serializar la clase pero no serializará el valor con el configurador protegido.

Entonces no es posible. La forma alternativa que utilicé fue generar un método ToSerializableType () para cada una de estas clases que devuelve una instancia de una clase similar que tiene todas las propiedades de lectura / escritura.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top