2

我正在开发一个 ASP.NET Web API 服务,它允许用户发布元数据。

在用户发布的数据合同之一中,他们应该能够以 XML 格式发布自己的自定义元数据。这是一个例子:

<Delivery>
    <Type>Direct</Type>
    <Time>12:00:01</Time>
    <Format>Segmented</Format>
    <CustomMetadata>
        <ClientReference>R46375683</ClientReference>
        <Contact>Me@There.com</Contact>
    </CustomMetadata>
</Delivery>

但是,我无法创建成功正确反序列化的数据合约。对于 CustomMetadata 节点,我有:

[DataMember(EmitDefaultValue=false)]
public XmlNode CustomMetadata { get; set; }

当它被反序列化时,我收到一个异常:

“集合类型 'System.Xml.XmlNode' 无法反序列化,因为它没有有效的 Add 方法,参数类型为 'System.Object'。”

我不完全理解为什么它试图向 XmlNode 中“添加”任何东西,但无论出于何种原因,它都失败了。做这种事情是否有替代方法,例如反序列化为不同的类型?我尝试反序列化为字符串,但这也给出了异常。

4

2 回答 2

3

Data Contract 序列化只支持原语和一些特殊类型。您必须使用 XmlElement 而不是 XmlNode。

尝试:

[DataMemeber]
public XmlElement CustomMetadata { get; set; }

请参阅http://msdn.microsoft.com/en-us/library/ms733127.aspx

于 2013-01-24T17:37:57.473 回答
1

您可以尝试使用 XmlElement 代替 XmlNode 吗?我相信序列化程序只有反序列化的特殊情况元素。XElement 也应该可以工作。

于 2013-01-24T17:40:17.580 回答