2014-02-05 51 views
3

我正在将一些XML反序列化到我的类中,这一切都正常工作。我想要发生的是,如果XML不包含我的一个类属性的元素,而不是将该属性设置为null,那么我希望它等于String.Empty。XML反序列化丢失元素

例如,这是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设置为null。我希望将其设置为空字符串,就像我在XML中传递JobTitle时一样,但将值设置为空。

是否有可能使用序列化方法的某种属性来做到这一点?

+0

至于我可以告诉你大概会必须创建一个从'XmlElementAttribute'继承的自定义属性才能完成。我不得不问,为什么'null'很重要?你不能在你的代码中处理它吗? – Yuck

+0

在我称之为的Web服务方法中,它不处理空值,我宁愿不必做一些混乱的替换。我知道哪些字段可能为空,因为我在不同的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