2014-11-05 48 views
1

我想要做的事,如:WCF:[的XmlElement的typeof]在數據成員屬性

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

我想用DataContractSerializer爲WCF做到這一點。 類似於Datamember屬性。

這相當於xsd:Choice

我打算根據其類型動態分配標籤。

謝謝。

回答

2

根據以下MSDN鏈接,DataContractSerializer不支持將XSD選項映射到CLR等效類型。

choice | Forbidden 

禁止。 DataContractSerializer不支持使用該功能導入模式。例如,Svcutil.exe在訪問具有使用此類功能的模式的WSDL時,可以轉而使用XmlSerializer。這是默認的。

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

注意:您可能能夠解決使用數據協定已知類型的問題。 http://msdn.microsoft.com/en-us/library/ms730167.aspx

+1

好,但是這段代碼沒有「[XmlElement(」Foo1「,typeof(Foo1Type))] [XmlElement(」Foo2「,typeof(Foo2Type))] [DataMember] public object Foo {get;組; }'如果它回退到XmlSerializer,爲什麼我的seriazlized XML標籤名稱總是「Foo」而不是「Foo1」或「Foo2」? – k4st0r42 2014-11-05 15:54:54

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] 

完滿成功例子是:http://www.janus-net.de/2007/08/07/using-xschoice-in-wcf-services/