2016-08-18 6 views
0

私のWebサービスに送信されるXMLには、次のSOAPリクエストがあります。 "Firstname"の複数の出現箇所を、たとえば配列に解析する必要がありますが、必ずしもそうとは限りません。 残念ながら、リクエストを変更することはできません。ウェブサービスのみを変更することはできません。次のクライアントXMLと同等のWCF C#とは何ですか?

次のクライアントXMLと同等のWCF C#とは何ですか?

<foo:NameHent> 
    <foo1:Date>1988-03-05</foo1:Date> 
    <foo1:Firstname>John</foo1:Firstname> 
    <foo1:Firstname>Michael</foo1:Firstname> 
    <foo1:Lastname>Doe</foo1:Lastname> 
</foo:NameHent> 

次は動作しません:

public partial class NameHentParams 
{ 
    private System.DateTime dateField; 
    private string[] firstnameField; 
    private string lastnameField; 

    public System.DateTime Date 
    { 
     get { return this.dateField; } 
     set { this.dateField = value; } 
    } 

    public string[] Firstname 
    { 
     get { return this.firstnameField; } 
     set { this.firstnameField = value; } 
    } 

    public string Lastname 
    { 
     get { return this.lastnameField; } 
     set { this.lastnameField = value; } 
    } 
} 
+0

これは、http://stackoverflow.coを助けるかもしれませんm/questions/11677123/wcf-same-name-tags-in-xml-response –

+0

それはすべてですか?名前空間定義(xmlns)はどこにありますか? –

+0

@Sal Alあなたは具体的な回答がありますか?文字列[]をListに変更するだけでは動作しませんでした Godspark

答えて

0
var xml1 = 
      "<?xml version=\"1.0\" encoding=\"utf-8\"?><foo:NameHent xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:foo1=\"http://sample.com\" xmlns:foo=\"http://example.com\"><foo1:Firstname>John</foo1:Firstname><foo1:Firstname>Michael</foo1:Firstname><foo1:Lastname>Doe</foo1:Lastname><foo1:Date>1988-03-05</foo1:Date></foo:NameHent>"; 

XmlSerializer xmlSerializer = new XmlSerializer(typeof(NameHent)); 
     NameHent c = xmlSerializer.Deserialize(new StringReader(xml1)) as NameHent; 


public class NameHent 
{ 
    [XmlElement(Namespace = "http://sample.com")] 
    public string [] Firstname; 

    [XmlElement(Namespace = "http://sample.com")] 
    public string Lastname; 

    [XmlElement(Namespace = "http://sample.com")] 
    public string Date; 

    [XmlNamespaceDeclarations] 
    public XmlSerializerNamespaces xmlns = new XmlSerializerNamespaces(); 

    public NameHent() 
    { 
     xmlns.Add("foo", "http://example.com"); 
     xmlns.Add("foo1", "http://sample.com"); 
    } 
} 
+0

これが役立つことを願っています。 –

+0

コードで何を変更するべきか分かりません。解析は「自動的に」行われ、外部クライアントが特定のメソッドを呼び出すたびにトリガーされます。私はまた、ServiceContract、OperationContract、最後にMessageContractを使用して通信しています。 – Godspark

+0

私はWCFアプリケーションを作成しており、期待どおりに動作するようです。 –

0

私はWCFテストクライアントを使用していますが、あなたはまた、SOAPUIを使用して、それをテストすることができ、

enter image description here

[ServiceContract] 
public class NameHent 
{ 
    [DataMember] 
    public string[] Firstname; 

    [DataMember] 
    public string Lastname; 

    [DataMember] 
    public string Date; 
} 
+0

答えにSOAPリクエストとNameHentクラスも含めることができますか? – Godspark

+0

NameHentクラスを追加しました。リクエストはWCFテストクライアントから生成されました –

+0

提案されたソリューションは何ですか?私はgetterとsettersを削除しようとしましたが、違いはありません。 – Godspark

関連する問題