2011-04-29 60 views
7

ksoap2可以將枚舉傳遞給webservice?如何將枚舉值傳遞給wcf webservice

有一個WCF Web服務:

[OperationContract] 
string TestEnum(CodeType code); 

CODETYPE是DOTNET枚舉:

public enum CodeType 
    { 
     [EnumMember] 
     ALL, 

     [EnumMember] 
     VehicleColor 
    } 

我怎麼能說在Android客戶端這個WCF web服務?

我創建一個枚舉CodeType並實現KvmSerializable。在方法getPropertyInfo中,info.name(info.type)的值是什麼?

public enum CodeType implements KvmSerializable, BaseInterface { 
    ALL, 

    VehicleColor; 
//....... 
    @Override 
    public void getPropertyInfo(int index, Hashtable properties, PropertyInfo info) { 
     //info.namespace = this.NameSpace; 
     info.name = ?; 
     info.type = ?; 

    } 
} 

感謝您的幫助。

+0

我有同樣的問題,有沒有人解決這個問題?提前致謝! – cbuck12000 2011-06-01 20:12:52

+0

@ cbuck12000:不確定你是否會收到我的答案通知,我想確保你知道...... – 2011-06-06 13:57:39

回答

0

你有

[ServiceContract] 
[ServiceKnownType(typeof(CodeType))] 
public interface ITheService 
{ 
    [OperationContract] 
    string TestEnum(CodeType code); 
} 

[DataContract] 
public enum CodeType 
{ 
    // ... 
} 

編輯:

的搜索也止跌回升this了一下,也可能是使用的...

+0

我認爲我的問題是與KSoap2。如何將枚舉值參數發送到Web服務方法或處理方法返回的類內的枚舉屬性)。我可以序列化複雜的對象等,但沒有枚舉? – cbuck12000 2011-06-06 14:16:44

4

我只是通過元帥解決了枚舉問題。

我創建了一個Java-Enum「複製」.net文件。然後我寫了一個元帥級吧:

public class MarshalEnum implements org.ksoap2.serialization.Marshal 
{ 
    ... // Singleton-Pattern 

    public Object readInstance(XmlPullParser xpp, String string, String string1, 
          PropertyInfo pi) 
     throws IOException, XmlPullParserException 
{ 
    return MyEnum.valueOf(xpp.nextText()); 
} 

public void writeInstance(XmlSerializer xs, Object o) 
     throws IOException 
{ 
    xs.text(((MyEnum)o).name()); 
} 

public void register(SoapSerializationEnvelope sse) 
{ 
    sse.addMapping(sse.xsd, "MyEnum", MyEnum.class, MarshalEnum.getInstance()); 
} 
} // class 

然後,調用在其中MyEnum值應送交方法時:

//... blah blah 
SoapSerializationEnvelope envelope = 
          new SoapSerializationEnvelope(SoapEnvelope.VER11); 
envelope.addMapping(SOAP_REMOTE_NAMESPACE, "MyEnum", MyEnum.class,  
        MarshalEnum.getInstance()); 
//... and so on. 

注意即SOAP_REMOTE_NAMESPACE是的數據合同的命名空間枚舉將被使用!如果您不確定,請參閱wsdl文件以找出它。 應該看起來像「http://schemas.datacontract.org/2009/08/Your.dotNet.Namespace」。

我希望這也能爲你工作。

相關問題