我正在开发一个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“添加”任何东西,但无论出于何种原因,它都失败了。是否有替代方法可以执行此类操作,例如反序列化为其他类型?我尝试反序列化为一个字符串,但这也给了一个例外。
答案 0 :(得分:3)
数据合同序列化仅支持基元和一些特殊类型。您必须使用XmlElement而不是XmlNode。
尝试:
[DataMemeber]
public XmlElement CustomMetadata { get; set; }
答案 1 :(得分:1)
您可以尝试使用XmlElement而不是XmlNode吗?我相信序列化程序只有反序列化的特殊情况元素。 XElement也应该有效。