c# - XmlSerializer 和可为空的属性

标签 c# .net attributes nullable xmlserializer

我有一个包含大量 Nullable 属性的类,我希望将其作为属性序列化为 XML。这显然是一个禁忌,因为它们被认为是“复杂类型”。因此,我改为实现 *Specified 模式,我在其中创建一个附加 *Value 和 *Specified 属性,如下所示:

[XmlIgnore]
public int? Age
{
    get { return this.age; }
    set { this.age = value; }
}

[XmlAttribute("Age")]
public int AgeValue
{
    get { return this.age.Value; }
    set { this.age = value; }
}

[XmlIgnore]
public bool AgeValueSpecified
{
    get { return this.age.HasValue; }
}

效果很好——如果“年龄”属性有值,它会被序列化为一个属性。如果它没有值,则不会序列化。

问题是,正如我提到的,我的类(class)中有很多 Nullable-s,这种模式只会让事情变得困惑和难以管理。

我希望有一种方法可以使 Nullable 对 XmlSerializer 更加友好。或者,如果失败了,一种创建 Nullable 替换的方法是。

有人知道我该怎么做吗?

谢谢。

最佳答案

我在处理一些代码时遇到了类似的问题,因此我决定只对我正在序列化和反序列化的属性使用一个字符串。我最终得到了这样的结果:

[XmlAttribute("Age")]
public string Age
{
    get 
    { 
        if (this.age.HasValue)
            return this.age.Value.ToString(); 
        else
            return null;
    }
    set 
    { 
        if (value != null)
            this.age = int.Parse(value);
        else
            this.age = null;
    }
}

[XmlIgnore]
public int? age;

关于c# - XmlSerializer 和可为空的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3250706/

相关文章:

c# - 工具条上的组合框发生异常 "Error when creating window handle"

c# - Visual C# Express 2010 从 Visual Studio 导入项目

c# - C# 中的数据网格访问

c# 我如何从我的类(class)访问我的表单控件?

c# - 用 cortana 解析数字

c# - TextBox LostFocus 事件发生得太频繁

从另一个 AppDomain 访问时,c# 脚本有错误的数据

python - 为什么我的类(class)会引发 AttributeError?

perl - 为 Moo 只读属性设置编写器名称是否使其可读写?

Java XML JDOM2 XPath - 使用 XPath 表达式从 XML 属性和元素读取文本值