2014-02-05 3 views
3

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

Например, это 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; } 
} 

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

Возможно ли это сделать с использованием какого-либо свойства по методу Serialization?

+0

Насколько я могу сказать вам, вероятно, необходимо создать настраиваемый атрибут, который наследуется от 'XmlElementAttribute', чтобы выполнить это. Я должен спросить, почему, почему «нуль» имеет значение? Разве вы не можете справиться с этим в своем коде? – Yuck

+0

В методе веб-службы, который я вызываю в результате этого, он не обрабатывает значения null, и мне не нужно делать какую-то грязную замену. Я знаю, какие поля потенциально могут быть пустыми, потому что я использую схему для разных XML-входов. – Mark

ответ

7

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

private string jobTitle = ""; 

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

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

public PersonObject() 
{ 
    JobTitle = ""; 
    NamePrefix = ""; 
    FullName = ""; 
} 
+0

Добавление JobTitle = ""; в конструкторе исправил его, спасибо :) – Mark