System.Xml C# как сделать необязательное для сериализации поле

115
13 июня 2021, 11:40

Допустим у меня есть класс User, в классе User есть string? поле Country. При сериализации файла создаётся

<User>
   <Country xsi:nil="true" />
</User>

Как сделать так чтобы данное поле не сериализовывалось,но при этом человек мог бы написать

<User>
   <Country>America</Country>
</User>

и это могло бы десериализоваться

Answer 1

Если вам нужно только десериализовывать, но никогда не сериализовывать, то добавьте в свой класс метод

[XmlElement("Country")]
public string Country { get; set; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public bool ShouldSerializeCountry() => false;

Тогда он никогда не появится при сериализации, но заполнится при десериализации. Для того, чтобы свойство сериализовалось, если оно не пустое, проверяйте в этом методе Country на null

[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public bool ShouldSerializeCountry() => !string.IsNullOrEmpty(Country);
Answer 2

Попробуй у себя в классе User пометить это поле следующим атрибутом:

public class User
{
    [System.Xml.Serialization.XmlElement(IsNullable = true)]
    public string Country{ get; set; }
    //// ....
}
READ ALSO
WPF Binding в значение - динамический биндинг

WPF Binding в значение - динамический биндинг

вопросик есть, как можно передать команде сразу два параметра, при этом что один из параметров состояние текущего элемента

103
Работа приложения с Windows Form в фоновом режиме

Работа приложения с Windows Form в фоновом режиме

У меня есть рабочее приложение, написанное для себя, которое перемещает файлыДля финального завершения осталось доделать, чтобы оно работало...

97
Сохранить видео поток VLC C#

Сохранить видео поток VLC C#

Требуется сохранить видео поток на жесткий диск, который транслируется на форму(WindowsForms) через библиотеку VLCИмеется ip и порт источника трансляции(Tcp)

75
Не получается отправить ответ в viber ASP.NET CORE

Не получается отправить ответ в viber ASP.NET CORE

Нужно отправить обратный ответ при событии conversation_started, не пойму как правильно отправить, не приходит сообщение в viberВ postman отправлял json и в качестве...

96