XML序列化可选属性的默认值

我有一组使用xsd.exe构建的类,我正在尝试序列化它们。 但是,生成的XML中不包含属性。 以下是问题所在的架构的一部分。

  /* sequence removed for brevity */          

xsd.exe在“Widget”类和另一个名为“VersionSpecified”的属性上生成了一个名为“Version”的属性,但是当我序列化时,即使设置为true,这似乎也不会生成属性:

 [XmlAttributeAttribute] [DefaultValueAttribute(Version.Version_1_1)] public Version Version { get; set; } [Serialization.XmlIgnoreAttribute] public bool VersionSpecified { get; set; } 

这是它所基于的枚举:

 ///  [GeneratedCodeAttribute("xsd", "2.0.50727.3038")] [Serializable] public enum Version { [XmlEnumAttribute("1.0")] Version_1_0, [XmlEnumAttribute("1.1")] Version_1_1, } 

根据请求的代码段

 Widget widget = new Widget(); widget.Version = Version.Version_1_1; widget.VersionSpecified = true; XmlSerializer serializer = new XmlSerializer(widget.GetType()); serializer.Serialize(/*Memory Stream object*/, widget); 

有没有人对为什么序列化拒绝引入属性有任何想法?

这是因为您将默认值指定为“1.1”。 当属性等于其默认值时,序列化程序不会创建元素/属性。

在序列化之前,必须将VersionSpecified标志设置为true。 这就是它如何知道是否要序列化这个可选属性。