【发布时间】:2019-03-20 15:05:43
【问题描述】:
【问题讨论】:
标签: android .net soap-client ksoap2 android-ksoap2
【问题讨论】:
标签: android .net soap-client ksoap2 android-ksoap2
假设你是KvmSerilizer,你可以像这样定义属性来创建一个数组:
info.setName("ProjectImage");
info.setType(PropertyInfo.VECTOR_CLASS);
elementType.setType(PropertyInfo.STRING_CLASS);
elementType.setName("base64Binary");
elementType.setNamespace(Constants.NAMESPACE);
info.setElementType(elementType);
但我认为你需要vector而不是ArrayList,否则serelizer将无法工作。
你的属性应该是private Vector<byte[]>。
此外,您还需要一个将您的 byte[] 转换为 base64 字符串的编组器:
public class MarshalBase64 implements Marshal {
@Override
public Object readInstance(XmlPullParser parser, String namespace, String name, PropertyInfo expected) throws IOException, XmlPullParserException {
String str = parser.nextText();
byte[] decoded = Base64.decode(str, Base64.DEFAULT);
return decoded;
}
@Override
public void writeInstance(XmlSerializer writer, Object instance) throws IOException {
byte[] data = (byte[]) instance;
String encoded = Base64.encodeToString(data, Base64.NO_WRAP);
writer.text(encoded);
}
@Override
public void register(SoapSerializationEnvelope envelope) {
envelope.addMapping("http://www.w3.org/2001/XMLSchema", "base64Binary", byte[].class, this);
}
}
【讨论】: