Я десериализирую XML в свой класс, и все работает нормально. Я хочу, чтобы XML не содержал элемента для одного из свойств моего класса, а не устанавливал для свойства значение null, я хочу, чтобы он был эквивалентом String.Empty.

Например, это XML:

<Person>
    <Title>Mr</Title>
    <FullName>John Smith</FullName>
</Person>

Это класс:

[XmlRoot("Person")]
public sealed class PersonObject
{
    [XmlElement("Title")]
    public string NamePrefix { get; set; }

    [XmlElement("FullName")]
    public string FullName { get; set; }

    [XmlElement("JobTitle")]
    public string JobTitle { get; set; }
}

В настоящее время, если я десериализирую этот объект, JobTitle будет иметь значение null. Я хочу, чтобы для него была установлена ​​пустая строка, как если бы я передал JobTitle в XML, но установил нулевое значение.

Можно ли это сделать, используя какое-то свойство в методе сериализации?

3
Mark 5 Фев 2014 в 18:05
Насколько я могу судить, вам, вероятно, придется создать настраиваемый атрибут, наследующий от XmlElementAttribute, для этого. Я должен спросить, почему null имеет значение? Разве вы не можете просто обработать это в своем коде?
 – 
Yuck
5 Фев 2014 в 18:10
В методе веб-службы, который я вызываю в результате этого, он не обрабатывает значения NULL, и я бы предпочел не выполнять какую-то беспорядочную замену. Я знаю, какие поля потенциально могут быть пустыми, потому что я использую схему для разных входов XML.
 – 
Mark
5 Фев 2014 в 18:24

1 ответ

Лучший ответ

Вы можете сделать это с помощью резервного поля со значением по умолчанию:

private string jobTitle = "";

[XmlElement("JobTitle")]
public string JobTitle { get {return jobTitle;} set {jobTitle = value;} }

Или установите его в конструкторе по умолчанию:

public PersonObject()
{
    JobTitle = "";
    NamePrefix = "";
    FullName = "";
}
8
D Stanley 5 Фев 2014 в 18:10