【问题标题】:XML Deserialize Missing ElementXML反序列化缺失元素
【发布时间】:2014-02-05 14:05:47
【问题描述】:

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

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

【问题讨论】:

  • 据我所知,您可能必须创建一个继承自 XmlElementAttribute 的自定义属性才能完成此操作。我不得不问,为什么null 很重要?你不能在你的代码中处理它吗?
  • 在我因此而调用的 Web 服务方法中,它不处理空值,我宁愿不必进行某种混乱的替换。我知道哪些字段可能为空,因为我在不同的 XML 输入之间共享架构。

标签: c# asp.net xml serialization


【解决方案1】:

可以使用具有默认值的支持字段来做到这一点:

private string jobTitle = "";

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-24
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-10
    相关资源
    最近更新 更多