Entwickler-Ecke
Basistechnologien - Klasse in einer Klasse instanzieren?
chx_de - Mo 21.11.11 13:25
Titel: Klasse in einer Klasse instanzieren?
Hallo,
ich habe mir in VisualStudio ein Project angelegt. Dann habe ich einen Dienstverweis erstellt und den Link zu meiner WSDL angegeben. Es wurde dann reichlich Code erzeugt und die Schnittstelle funktioniert soweit auch ganz gut. Nur bei bestimmten Calls habe ich Probleme. Ich muss dazu eine Klasse aufrufen. z.B. PlentySoapRequest_GetItemsStock.
In dieser Klasse wiederrum gibt es eine Eigenschaft, die selber eine Klasse auffruft. Und das ganz auch noch als Array.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| PlentySoapRequest_GetItemsStock[] MyStockRequest = new PlentySoapRequest_GetItemsStock[1]; PlentySoapObject_GetItemsStock[] MyStockObject = new PlentySoapObject_GetItemsStock[1];
MyStockObject[0] = new PlentySoapObject_GetItemsStock(); MyStockObject[0].SKU = "abcd11";
MyStockRequest[0].GetItemsStock[0] = new PlentySoapObject_GetItemsStock(); MyStockRequest[0].GetItemsStock[0] = MyStockObject[0];
Console.WriteLine("SKU>>> {0}", MyStockObject[0].SKU); Console.ReadLine(); |
Frage: Wie kann ich eine Klasse innerhalb einer Klasse richtig instanzieren?
*****************Anhang der Datendefinitionen PlentySoapRequest
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| public partial class PlentySoapRequest_GetItemsStock : object, System.ComponentModel.INotifyPropertyChanged { private PlentySoapObject_GetItemsStock[] getItemsStockField; [System.Xml.Serialization.SoapElementAttribute(IsNullable=true)] public PlentySoapObject_GetItemsStock[] GetItemsStock { get { return this.getItemsStockField; } set { this.getItemsStockField = value; this.RaisePropertyChanged("GetItemsStock"); } } |
***************Anhang der Datendefinitionen PlentySoapObject
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| public partial class PlentySoapRequest_GetItemsStock : object, System.ComponentModel.INotifyPropertyChanged { private PlentySoapObject_GetItemsStock[] getItemsStockField; [System.Xml.Serialization.SoapElementAttribute(IsNullable=true)] public PlentySoapObject_GetItemsStock[] GetItemsStock { get { return this.getItemsStockField; } set { this.getItemsStockField = value; this.RaisePropertyChanged("GetItemsStock"); } } |
Mit freundlichen Grüßen
Christan Blaß
Moderiert von
Christian S.: Code- durch C#-Tags ersetzt
Ralf Jansen - Mo 21.11.11 14:01
Wenn es auf dem Server keine ItemStocks gibt bekommst du null. Das solltest du definitiv testen bevor du irgendwas mit den Eementen machst. Übrigens auch wenn dein Code ein leeres Array erzeugen würde würde der Zugriff auf das erste Element trotzdem knallen. Wenn du auf dem Client neue Items hinzufügst müsstest du eh erst ein Array der dann passenden Größe anlegen und die bereits vorhanden Elemente da rein kopieren. Geschickter wäre es wahrscheinlich den Proxy Code nochmal neu zu generieren. Im Wsdl Wizard gibt es eine Option die dir erlaubt Listen nicht als Arrays sondern als generische Liste darzustellen. Damit wird das Handling einfacher.
chx_de - Mo 21.11.11 15:14
Ralf Jansen hat folgendes geschrieben : |
Wenn es auf dem Server keine ItemStocks gibt bekommst du null. Das solltest du definitiv testen bevor du irgendwas mit den Eementen machst. Übrigens auch wenn dein Code ein leeres Array erzeugen würde würde der Zugriff auf das erste Element trotzdem knallen. Wenn du auf dem Client neue Items hinzufügst müsstest du eh erst ein Array der dann passenden Größe anlegen und die bereits vorhanden Elemente da rein kopieren. Geschickter wäre es wahrscheinlich den Proxy Code nochmal neu zu generieren. Im Wsdl Wizard gibt es eine Option die dir erlaubt Listen nicht als Arrays sondern als generische Liste darzustellen. Damit wird das Handling einfacher. |
Hi,
also auf dem Server sind ItemStocks vorhanden. Das ist nicht das Problem. Ich habe jetzt mal im WSDL Wizard den Auflistungstyp auf System.Collections.Generic.List gestellt und dann alles neu erstellt. Es hat sich aber nichts geändert.
Der Code bleibt irgentwie gleich:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| public partial class PlentySoapRequest_GetItemsStock : object, System.ComponentModel.INotifyPropertyChanged { private PlentySoapObject_GetItemsStock[] getItemsStockField; [System.Xml.Serialization.SoapElementAttribute(IsNullable=true)] public PlentySoapObject_GetItemsStock[] GetItemsStock { get { return this.getItemsStockField; } set { this.getItemsStockField = value; this.RaisePropertyChanged("GetItemsStock"); } |
Wenn ich das jetzt wie folg aufrufe, bekomme ich immer den Fehler, dass ich mit NEW eine Instanz erstellen soll. Laut Google ist das auch die Lösung, nur leider weiß ich nicht wie.
C#-Quelltext
1: 2:
| PlentySoapRequest_GetItemsStock MyStockRequest = new PlentySoapRequest_GetItemsStock(); MyStockRequest.GetItemsStock[0].SKU = "aaa"; |
Ich weiß nicht wie ich der Eigenschaft GetItemsStock in der Klasse PlentySoapRequest_GetItemsStock den WErt für z.B. SKU zuweisen soll.
Moderiert von
Christian S.: Code- durch C#-Tags ersetzt
Ralf Jansen - Mo 21.11.11 15:21
Bevor du auf ein Array Element zugreifen kannst musst du wie ich gesagt habe auch erstmal ein entsprechendes Array erzeugen.
C#-Quelltext
1: 2:
| MyStockRequest.GetItemsStock = new PlentySoapObject_GetItemsStock[1]; MyStockRequest.GetItemsStock[0].SKU = "aaa"; |
chx_de - Mo 21.11.11 15:30
Ralf Jansen hat folgendes geschrieben : |
Bevor du auf ein Array Element zugreifen kannst musst du wie ich gesagt habe auch erstmal ein entsprechendes Array erzeugen.
C#-Quelltext 1: 2:
| MyStockRequest.GetItemsStock = new PlentySoapObject_GetItemsStock[1]; MyStockRequest.GetItemsStock[0].SKU = "aaa"; | |
Also wie folgt?
C#-Quelltext
1: 2: 3:
| PlentySoapRequest_GetItemsStock MyStockRequest = new PlentySoapRequest_GetItemsStock(); MyStockRequest.GetItemsStock = new PlentySoapObject_GetItemsStock[1]; MyStockRequest.GetItemsStock[0].SKU = "aaa"; |
--> Das bringt aber leider immer noch den Fehler. Der Debuger steigt in der letzten Zeile aus und gibt für MyStockRequest.GetItemsStock[0] ein NULL aus. Das ist ja noch alles bevor ich dann den eigentlichen Call auf den Server absetzen werden.
Irgentwie hängt es noch daran, das das Array erzeugt wird. Die Lösung oben muss noch einen Fehler haben.
Moderiert von
Christian S.: Code- durch C#-Tags ersetzt
Ralf Jansen - Mo 21.11.11 15:32
Nicht ganz. Nach dem Array selbst musst du auch noch das konkrete Array Element erzeugen. Das gleich zu befüllen und dann erst MyStockRequest.GetItemsStock[0] zuzuweisen ist wohl am einfachsten.
chx_de - Mo 21.11.11 15:36
Ralf Jansen hat folgendes geschrieben : |
Nicht ganz. Nach dem Array selbst musst du auch noch das konkrete Array Element erzeugen. Das gleich zu befüllen und dann erst MyStockRequest.GetItemsStock[0] zuzuweisen ist wohl am einfachsten. |
Kannst du mir dazu Beispiel Code geben? Also wie ich z.B. das ArrayElement erzeuge? Das wird ja genau das sein, wass ich nicht hinbekomme.
Ralf Jansen - Mo 21.11.11 15:45
Zitat: |
Kannst du mir dazu Beispiel Code geben |
Dein erster Code im ersten Beitrag (wenn es denn dein Code ist). Zeile 9
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!