Существует ли способ избежать XmlSerializer для не инициализации пустого свойства при десериализации?

У меня есть этот класс:

public class MySerializableClass
{
    public List<MyObject> MyList { get; set; }
}

Если MyList является пустым, когда MySerializableClass сериализируется, у меня должен быть он пустой указатель, когда он десериализовывается также, но XmlSerializer всегда инициализирует его, когда он десериализовывает мой класс.

Существует ли способ избежать его инициализирующий пустые свойства?

MyList даже не зарегистрирован в сериализированном файле, когда это является пустым. Когда я загружаю его нулевыми значениями и сохраняю его снова, MyList больше не является пустым, это сериализируется как Список <> с 0 объектами, но не пустое.

Спасибо.

Подробнее:

Свойство IsDeserializing не жизнеспособно из-за некоторых ограничений кода в структуре класса

10
задан Carlo 2 February 2010 в 23:52
поделиться

2 ответа

Похоже на жучок...

Даже если вы попытаетесь пометить свойство как недействительное, похоже, это не сработает.

[XmlArray(IsNullable = true)]
public List<MyObject> MyList { get; set; }

Свойство MyList сериализуется следующим образом :

<MyList xsi:nil="true" />

Так что XML ясно указывает, что список нулевой, но после десериализации он все равно инициализируется в пустой список....

Если вы замените List на MyObject[], то он работает нормально (даже без IsNullable = true), но это, вероятно, не то, что вы хотите....

Вам, вероятно, следует сообщить об этом на Connect.

11
ответ дан 4 December 2019 в 01:00
поделиться

Не используйте автоматически реализуемые свойства, если вам нужен ноль. используйте, например,

public class MySerializableClass 
{ 
    List<MyObject> myList 
    public List<MyObject> MyList { get {return myList;} set {myList = value;} } 
} 
0
ответ дан 4 December 2019 в 01:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: