WCF:DataMember属性中的[XmlElement,typeof]

时间:2014-11-05 13:42:13

标签: c# .net xml wcf serialization

我想做类似的事情:

[XmlElement("Foo1", typeof(Foo1Type))]
[XmlElement("Foo2", typeof(Foo2Type))]
public object Foo { get; set; }

我希望通过DataContractSerializer为WCF执行此操作。 Datamember属性中的类似内容。

这相当于xsd:Choice

我的目标是根据类型动态分配标签。

谢谢。

2 个答案:

答案 0 :(得分:3)

根据以下MSDN链接,DataContractSerializer不支持将XSD选择映射到CLR等效类型。

choice  |  Forbidden

禁止。 DataContractSerializer不支持使用该功能导入架构。例如,当使用具有使用此类功能的架构访问WSDL时,Svcutil.exe会回退到使用XmlSerializer。这是默认情况。

http://msdn.microsoft.com/en-us/library/ms733112(v=vs.110).aspx

注意:您可以使用数据合同已知类型解决此问题。 http://msdn.microsoft.com/en-us/library/ms730167.aspx

答案 1 :(得分:0)

我必须按如下方式更改 ServiceContract

[ServiceContract(Name="ChoiceService", Namespace="http://dev.janus-net.de/example/choice")]
[XmlSerializerFormat(Style = OperationFormatStyle.Document)]
public interface IChoiceService

在DataContract中添加 Serializable

[DataContract(Namespace = "http://...", Name = "yourContract")]
[Serializable]

complet示例位于:http://www.janus-net.de/2007/08/07/using-xschoice-in-wcf-services/