2013-03-26 6 views
5

Ich habe 2 Klassen:Pass Objekt mit komplexem Objekt mit Web-Service

public class testClass1 
    { 
     public string Name { get; set; } 
     public testClass2 testClass2Object { get; set; } 
    } 

    public class testClass2 
    { 
     public testClass2() { } 

     public testClass2(int i) { TestProperty = i; } 

     public int TestProperty { get; set; } 
    } 

und ich mag Objekt erste Klasse zurück mit webMethod:

[WebMethod] 
    public testClass1 testMethod() 
    { 
     testClass1 test = new testClass1(); 
     test.Name = "stackoverflow"; 
     test.testClass2Object = new testClass2(2); 
     return test; 
    } 

aber ich habe nicht die Werte von testClass2 Objekt von testClass1 Objekt.

Ich versuchte [Serializable] [XmlInclude(typeof(testClass2))] Anmerkungen, aber nichts geändert. Irgendwelche Vorschläge?

+6

Was passiert, wenn Sie den 'public testClass2 (int i)' -Konstruktor entfernen? Und was ist, wenn Sie die Deklaration in 'public testClass2 (int testProperty)' ändern? (Ich frage die zweite, weil ich weiß, dass die tatsächlichen Namen von ctor-Parametern JSON-Serialisierung beeinflussen können; nicht sicher, ob es sich auf andere Serialisierung auswirken wird). –

+1

@Matthew Watson Removed Konstruktor und es funktioniert jetzt danke. – pepela

+0

@Matthew Watson Ich kann keinen Konstruktor mit Parameter haben, wenn ich sein Objekt senden möchte? – pepela

Antwort

1

Wenn ich den Code ausführen "as is" und rufen Sie testmethod(), bekomme ich ...

<testClass1 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://tempuri.org/"> 
    <Name>stackoverflow</Name> 
    <testClass2Object> 
      <TestProperty>2</TestProperty> 
    </testClass2Object> 
</testClass1> 

Erwarten Sie etwas anderes? Vielleicht vermisse ich etwas.

Wenn dies Teil eines größeren Projekts ist, versuchen Sie vielleicht, nur diesen Code in ein neues Projekt zu stecken und zu prüfen, ob es sich um eine Einstellung oder eine andere Art von Konfigurationsproblemen handeln könnte.

+1

Ha! Ich wusste nicht, dass ich diese Frage mit Kopfgeld beantwortet hatte. :) –

0

Ich habe Ihren Code und die Ausgabe war etwas, was ich erwartet wurde. Sie sollten XML-Parse verwenden, um Ihre Daten von testclass2 zu erhalten.

EDIT

Ich empfehle Web API anstelle veralteter ASMX, die SOAP verwenden verwenden in Ausgabe no-Schema Tonnen XML generieren nicht strukturiert.

Web-API hat eine schnelle und leichte Ausgabe und Sie können sowohl JSON als auch XML-Format als Ausgabe haben. sehr robust!