Простой ответ на ваш вопрос - нет, вы не можете.Поэтому причина в том, что вы создаете объект при десериализации.
Но если вы действительно настаиваете на том, что объект может создавать свои собственные экземпляры, вы можете использовать приватную статическую переменную экземпляра, которую вы можете загрузить с объектом, полученным после десериализации.Затем другие открытые члены должны работать над экземпляром (если он не равен нулю)
примером (из моей головы, так что есть небольшая вероятность, что это не совсем правильно):
public class MyClass
{
private XmlSerializer _s = new XmlSerializer(typeof(MyClass));
private static MyClass mInstance = null;
public MyClass() { /* initialization logic */ }
public MyClass(XDocument xd)
{
mInstance = (MyClass)_s.Deserialize(xd.CreateReader());
}
public void DoSomething()
{
if (mInstance != null)
mInstance.DoSomething();
else
{
// logic for DoSomething
}
}
}
Надеюсь, это проясняет ситуацию, но мне не нравится такой дизайн.Я думаю, что это делает все это слишком сложным и чувствительным к ошибкам.