我想做类似的事情:
[XmlElement("Foo1", typeof(Foo1Type))]
[XmlElement("Foo2", typeof(Foo2Type))]
public object Foo { get; set; }
我希望通过DataContractSerializer
为WCF执行此操作。
Datamember
属性中的类似内容。
这相当于xsd:Choice
。
我的目标是根据类型动态分配标签。
谢谢。
答案 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/