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