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。 这就是它如何知道是否要序列化这个可选属性。