允许Web API数据合同中的自定义XML

时间:2013-01-24 17:32:46

标签: asp.net-web-api deserialization

我正在开发一个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“添加”任何东西,但无论出于何种原因,它都失败了。是否有替代方法可以执行此类操作,例如反序列化为其他类型?我尝试反序列化为一个字符串,但这也给了一个例外。

2 个答案:

答案 0 :(得分:3)

数据合同序列化仅支持基元和一些特殊类型。您必须使用XmlElement而不是XmlNode。

尝试:

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

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

答案 1 :(得分:1)

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