【发布时间】:2012-02-29 12:25:48
【问题描述】:
有没有办法在类级别声明 [XmlElement(IsNullable = true)] 以便类中的所有属性都将被 XML 序列化,即使它们为空?
例如
public BankAccount BankAccount { get; set; }
应该导致<BankAccount xsi:nil="true" />,而不是默认的缺失元素。
我试过了,但编译器(正确地)声明该属性对类声明无效。
这样做的原因是我不想为所有属性都指定这个。
编辑:这是我正在使用的序列化方法:
var serializer = new XmlSerializer(FormType);
var stream = new MemoryStream();
serializer.Serialize(stream, form);
【问题讨论】:
-
您是使用
XmlSerializer还是DataContractSerializer执行此操作,您是在Web 服务中执行此操作吗?如果您在 Web 服务之外使用XmlSerializer,您可能可以使用XmlAttributesOverride的重载来强制属性(尽管我从未尝试过)。它也可能在旧的 ASMX 样式 Web 服务中也可用,但我相当肯定你不能通过XmlSerializerFormatAttribute使用 WCF 来做到这一点。 -
XmlSerializer在一个类中将一个类持久化到一个 xml 文件中。 -
可能值得看看
XmlAttributesOverride类并使用XmlSerializer.Serialize的重载来接受它的实例。我的理解是,您可以通过在XmlAttributeOverride实例中明确指定覆盖来覆盖所有 Xml 属性行为。我从来没有这样做过,所以我不知道它是如何工作的,但我知道我已经看到过类似的问题,以此作为答案。 -
无论如何它都会反序列化为 null,不管它是否明确地这样写,除非这不是无参数构造函数中的默认值。你到底想通过这个实现什么?可能有足够的解决方法。 (例如,如果您只需要跟踪某个其他应用程序中的所有公共属性,您可以通过反射轻松做到这一点。)
-
@Zenexer - 这不适用于值类型。 This 博客提供了一个使用
DateTime的示例。
标签: c# attributes properties xml-serialization