Я написал собственный сериализатор, который работает, устанавливая свойства объекта путем отражения. Сериализуемые классы помечены атрибутом serializable, и все сериализуемые свойства также помечены. Например, следующий класс сериализуем:
[Serializable]
public class Foo
{
[SerializableProperty]
public string SomethingSerializable {get; set;}
public string SometthingNotSerializable {get; set;}
}
Когда сериализатору предлагается десериализовать SomethingSerializable
, он получает установленный метод свойства и использует его для его установки, выполняя что-то вроде этого:
PropertyInfo propertyInfo; //the property info of the property to set
//...//
if (propertyInfo.CanWrite && propertyInfo.GetSetMethod() != null)
{
propertyInfo.GetSetMethod().Invoke(obj, new object[]{val});
}
Это прекрасно работает, однако, как я могу сделать свойство setter доступным только для сериализатора? Если сеттер закрыт:
public string SomethingSerializable {get; private set;}
тогда вызов propertyInfo.GetSetMethod()
возвращает null в сериализаторе. Есть ли способ доступа к частному сетевому устройству или каким-либо другим способом, чтобы обеспечить доступ только к сериализатору? Сериализатор не гарантированно находится в одной и той же сборке.