كيفية إنشاء خدمة صابون WCF باستخدام List param ليتم استهلاكها من android

StackOverflow https://stackoverflow.com//questions/12684873

  •  12-12-2019
  •  | 
  •  

سؤال

أحتاج إلى تمرير أ List<string> or List<object> لاستهلاك خدمة صابون WCF من Android.لقد حاولت الكثير من الطرق.

عندما استخدمت الكود أدناه:

الطبقة العامة MarshalArray تنفذ Marshal {

@Override
public Object readInstance(XmlPullParser parser, String namespace, String name,
        PropertyInfo expected) throws IOException, XmlPullParserException {

    return GenericType.getObject(parser.nextText());
}

@Override
public void register(SoapSerializationEnvelope envelope) {
    envelope.addMapping("http://schemas.datacontract.org/2004/07/WcfService1", "GenericType", GenericType.class, this);
}

@Override
public void writeInstance(XmlSerializer writer, Object obj)
        throws IOException {
    GenericType sp =  (GenericType) obj;

    writer.startTag("http://schemas.datacontract.org/2004/07/WcfService1", "mydata");       
    for(String str : sp.mydata){
        writer.startTag("http://schemas.datacontract.org/2004/07/WcfService1", "string");
        writer.text(str);
        writer.endTag("http://schemas.datacontract.org/2004/07/WcfService1", "string");

    }       
    writer.endTag("http://schemas.datacontract.org/2004/07/WcfService1", "mydata"); 

    }}

مع خدمة wcf أدناه:

[ServiceContract]
[ServiceKnownType(typeof(WcfService1.GenericType<string>))]
public interface IService1
{

    [OperationContract]
    [ServiceKnownType(typeof(WcfService1.GenericType<string>))]
    string GetDataList(GenericType<string> objs);
} 

 [DataContract(Name = "GenericType")]
public class GenericType<T>
{
    List<T> data;

    [DataMember]
    public List<T> mydata
    {
        get { return data; }
        set { data = value; }
    }
}

تُرجع خدمة Wcf خطأً في خطأ الصابون مثل:خطأ داخلي في الخدمة..

ثم حاولت بطريقة أخرى:

public class Members extends Vector<String> implements KvmSerializable {

private static final long serialVersionUID = -1166006770093411055L;

@Override
public Object getProperty(int index) {
    return this.get(index);
}

@Override
public int getPropertyCount() {
    return this.size();
}

@Override
public void getPropertyInfo(int arg0, Hashtable arg1, PropertyInfo param) {
    param.name = "String";
    param.type = PropertyInfo.STRING_CLASS;
}

@Override
public void setProperty(int arg0, Object obj) {
    this.add(obj.toString());
}

}

مع خدمة wcf أدناه:

[ServiceContract]

الواجهة العامة iservice1 {

[OperationContract]

string GetDataList(List<string> objs);

}

لقد حصلت على خطأ في خطأ الصابون والذي يعود من خدمة wcf:

Deserialization fail...

في كل مرة أحصل على خطأ من خدمة wcf ..أعتقد بلدي wcf الخدمة حصلت على شيء خاطئ.لو حد يعرف الجواب..يرجى التكرم بالإجابة على سؤالي.

شكرا جدا...

هل كانت مفيدة؟

المحلول

وأخيراً حصلت على الجواب..

قررت استخدام فئة MarshalArray، وليس الأعضاء (KvmSerializable).

أثناء استخدام MarshalArray ، المشكلة في MarshalArray Class في Android ..

هنا هو الكود القديم الذي يحدث خطأ:

 for(String str : sp.mydata){
    writer.startTag("http://schemas.datacontract.org/2004/07/WcfService1", "string");
    writer.text(str);
    writer.endTag("http://schemas.datacontract.org/2004/07/WcfService1", "string");

}       

لقد قمت بتغييره إلى مثل أدناه:

for(String str:gt.mydata){
        writer.startTag("http://schemas.microsoft.com/2003/10/Serialization/Arrays", "string");
        writer.text(str);
        writer.endTag("http://schemas.microsoft.com/2003/10/Serialization/Arrays", "string");               
    }

ومن ثم يتم العمل بنجاح...

شكرا لمساعدتكم، stepoverflow.وكان علي أن أعرف الإجابة بنفسي....!!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top