У меня есть этот класс:
public class MySerializableClass
{
public List<MyObject> MyList { get; set; }
}
Если MyList является пустым, когда MySerializableClass сериализируется, у меня должен быть он пустой указатель, когда он десериализовывается также, но XmlSerializer всегда инициализирует его, когда он десериализовывает мой класс.
Существует ли способ избежать его инициализирующий пустые свойства?
MyList даже не зарегистрирован в сериализированном файле, когда это является пустым. Когда я загружаю его нулевыми значениями и сохраняю его снова, MyList больше не является пустым, это сериализируется как Список <> с 0 объектами, но не пустое.
Спасибо.
Подробнее:
Свойство IsDeserializing не жизнеспособно из-за некоторых ограничений кода в структуре класса
Похоже на жучок...
Даже если вы попытаетесь пометить свойство как недействительное, похоже, это не сработает.
[XmlArray(IsNullable = true)]
public List<MyObject> MyList { get; set; }
Свойство MyList сериализуется следующим образом :
<MyList xsi:nil="true" />
Так что XML ясно указывает, что список нулевой, но после десериализации он все равно инициализируется в пустой список....
Если вы замените List
на MyObject[]
, то он работает нормально (даже без IsNullable = true
), но это, вероятно, не то, что вы хотите....
Вам, вероятно, следует сообщить об этом на Connect.
Не используйте автоматически реализуемые свойства, если вам нужен ноль. используйте, например,
public class MySerializableClass
{
List<MyObject> myList
public List<MyObject> MyList { get {return myList;} set {myList = value;} }
}