Asp.net web api 允许在Web API数据契约中使用自定义XML

Asp.net web api 允许在Web API数据契约中使用自定义XML,asp.net-web-api,deserialization,Asp.net Web Api,Deserialization,我正在开发一个ASP.NETWebAPI服务,它允许用户发布元数据 在用户发布的一个数据契约中,他们应该能够以XML格式发布自己的自定义元数据。这是一个例子: 当它被反序列化时,我收到一个异常: 集合类型“System.Xml.XmlNode”无法反序列化,因为它 没有类型为的参数的有效Add方法 “System.Object” 我不完全理解为什么它试图向XmlNode添加任何内容,但不管出于什么原因,它都失败了。有没有其他方法可以做这种事情,比如反序列化到不同的类型?我尝试反序列化为字符串,但

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

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

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

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


我不完全理解为什么它试图向XmlNode添加任何内容,但不管出于什么原因,它都失败了。有没有其他方法可以做这种事情,比如反序列化到不同的类型?我尝试反序列化为字符串,但也出现了异常。

数据协定序列化只支持原语和一些特殊类型。必须使用XmlElement而不是XmlNode

尝试:


请参见

数据协定序列化仅支持原语和一些特殊类型。必须使用XmlElement而不是XmlNode

尝试:


请参见

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

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

直截了当,谢谢!我真的认为我应该能够自己找到这个,所以-1对我来说是一个糟糕的研究。仅供参考,我发现XmlNode[]更适合上面的例子。使用XmlElement时,必须有一个根元素,但使用XmlNode[]时,可以有几个元素作为直接子元素。直截了当地说,谢谢!我真的认为我应该能够自己找到这个,所以-1对我来说是一个糟糕的研究。仅供参考,我发现XmlNode[]更适合上面的例子。对于XmlElement,您必须有一个根元素,但是对于XmlNode[],您可以有几个元素作为直接子元素。
<Delivery>
    <Type>Direct</Type>
    <Time>12:00:01</Time>
    <Format>Segmented</Format>
    <CustomMetadata>
        <ClientReference>R46375683</ClientReference>
        <Contact>Me@There.com</Contact>
    </CustomMetadata>
</Delivery>
[DataMember(EmitDefaultValue=false)]
public XmlNode CustomMetadata { get; set; }
[DataMemeber]
public XmlElement CustomMetadata { get; set; }