2016-03-31 34 views
0

PHP'de yazılmış bir web servisim ve birlikte çalışan Java'da yazılmış bir istemci var. Ama şimdi, PHP-web servisini bir C# -webservice ile değiştirmeliyim ve Java-Client'ı değiştiremiyorum. Son bir adımdan başka bir çözüm buldum zaten. Yanıt parametrelerinden biri bir dizi olmak zorundadır. PHP yanıt oldu: dizide daha fazla eleman varsaC# webservice'de PHP benzeri dizi

<elements>ABC</elements> 

Ama:

<elements SOAP-ENC:arrayType="xsd:string[2]" xsi:type="ns1:stringArray"> 
    <item xsi:type="xsd:string">ABC</item> 
    <item xsi:type="xsd:string">XYZ</item> 
</elements> 

dizideki tek unsur varsa, C# gelen yanıt şöyle ve işleri Yanıt şöyle görünür:

<elements> 
    <string>ABC</string> 
    <string>XYZ</string> 
</elements> 

Ve istemci bir hata atar.

PHP'de bir dizi gibi davranan C# dizisi oluşturmak için bir yol var mı?


C# -Kod geçerli:

[System.Xml.Serialization.SoapElementAttribute(IsNullable = true)] 
public string[] elements { 
    get { 
     publicationsField = new string[] { "ABC", "XYZ" }; 
     return publicationsField; 
    } 
    set { 
     this.publicationsField = value; 
    } 
} 
+0

muhtemelen nasıl düzeltilir söylemek mümkün olacak C# kodu ve birisini gösterin. – Barmar

cevap

0

Sana XML olarak yanıtı ayrıştırmak ve <string> ayarlanmış olup olmadığını kontrol etmek girişiminde herhalde.

Öyleyse, tümünü bir döngü içinde ayrıştırıp bir diziye eklersiniz. Aksi halde, bir elemanla bir dizi oluşturacaksınız, bu eleman <elements> değeri.

(Düzenleme:. İşte bunun nasıl bir fikir için OP'ın isteğinize göre bazı sözde kod)

xml = ParseXML(GetXML()) 
elements = xml[elements] 

for each element in elements 
    if sub element named string exists 
     // it exists 
    else 
     // nope 
+0

"Dize ayarlanmış olup olmadığını kontrol et" ile ne demek istiyorsun? – Andreas

+0

'' öğesinin, XML'inizde yalnızca birden fazla öğe varsa yalnızca var olup olmadığını kontrol edebilirsiniz. –

+0

Yanıtı TCPMon ile kaydettim ve yayınladığım üçüncü kod örneğine benziyor. Yani boş değil, ancak Java istemcisi şöyle diyor: "SimpleDeserializer, bir alt öğeyi, beklenmedik bir şekilde, seri hale getirmeye çalışıyordu." Şimdi bir yol arıyordum, bunu söylemek için, s bir dizi değil, bir parçanın parçalarıdır. – Andreas