Escribí un serializador personalizado que funciona estableciendo las propiedades del objeto por reflexión. Las clases serializables están etiquetadas con un atributo serializable y todas las propiedades serializables también están etiquetadas. Por ejemplo, la siguiente clase es serializable:¿Es posible obtener el organismo privado de una propiedad a través de la reflexión?
[Serializable]
public class Foo
{
[SerializableProperty]
public string SomethingSerializable {get; set;}
public string SometthingNotSerializable {get; set;}
}
Cuando se le pide al serializador deserializar SomethingSerializable
, se pone el método conjunto de la propiedad y lo utiliza para configurarlo haciendo algo como esto:
PropertyInfo propertyInfo; //the property info of the property to set
//...//
if (propertyInfo.CanWrite && propertyInfo.GetSetMethod() != null)
{
propertyInfo.GetSetMethod().Invoke(obj, new object[]{val});
}
Esto funciona bien, sin embargo, ¿cómo puedo hacer que el establecimiento de propiedades solo sea accesible para el serializador? Si el colocador es privado:
public string SomethingSerializable {get; private set;}
entonces la llamada a propertyInfo.GetSetMethod()
devuelve un valor nulo en el serializador. ¿Hay alguna forma de acceder al setter privado o de otra forma para asegurar que solo el serializador pueda acceder al setter? No se garantiza que el serializador esté en el mismo ensamblaje.
Primero uno ¡me funciona muy bien! – Roboblob
Primero funciona, el segundo no – gibarsin
Primero funciona; en el segundo en "propiedad" devuelve valor nulo. –