XML反序列化缺少元素。

3
我是将一些XML序列化到我的类中,这很正常。但是如果XML不包含我类的某个属性元素时,我希望它的值为String.Empty而不是null。例如,以下是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。我希望它被设置为空字符串,就像在XML中传递JobTitle但没有设置值一样。

是否可能通过序列化方法的某种属性来实现?


据我所知,您可能需要创建一个继承自XmlElementAttribute的自定义属性来实现这一点。不过我必须问一下,为什么null很重要呢?您不能在代码中处理它吗? - Yuck
在我调用的Web服务方法中,它不处理空值,而我不想进行某种混乱的替换。我知道哪些字段可能为空,因为我正在跨不同的XML输入共享模式。 - Mark
1个回答

9

您可以使用带有默认值的备份字段来实现:

private string jobTitle = "";

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

或在默认构造函数中设置:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接