Autor Beitrag
paddy14
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 122



BeitragVerfasst: Mi 18.05.11 15:35 
Ich Serialisiere und Deserialisiere Objekte und schicke diese Über Networkstream zum Client.
Mit ein und demselben Objekt klappt das wunderbar, kann dieses Objekt auch mit unterschiedlichen Daten senden.

Nur wenn ich 2 unterschiedliche Objekte senden will nacheinander dann bekomme ich eine Exeption, die besagt, das das 2 Objekt noch im Stream vorhanden ist und deswegen mein Cast nicht geht. Ist ja auch klar er kann ja nicht 2 unterschiedliche Objekte in ein Objekt casten.

Nun zu meiner Frage.
Gibt es bei Networkstream eine Möglichkeit das ich die Position wo er zu lesen anfangen soll wieder auf 0 setzt bwz. alles was im Stream vohanden ist löscht so als wie wenn noch keine gesendet wurden?

mfg patrick
paddy14 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 122



BeitragVerfasst: Mi 18.05.11 16:52 
Kann mir da vllt einer Helfen oder mir eine Lösung vorschlagen?

Danke.
paddy14 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 122



BeitragVerfasst: Mi 18.05.11 19:27 
Weiß denn keiner wie das geht??
Trashkid2000
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 561
Erhaltene Danke: 137



BeitragVerfasst: Mi 18.05.11 19:51 
Hallo,

naja, ein Stream hat die Property "Position", die zurückgibt, an welcher Position sich ein Stream gerade befindet (also wieviel gelesen wurde). Diese Property kannst Du auch setzen, wie z.B. in Deinem Fall auf 0.

Aber da ich nicht gerade weiß, wofür Du das benötigst, oder wie Dein Code aussieht, kann ich da weiter auch nicht helfen.
LG
paddy14 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 122



BeitragVerfasst: Mi 18.05.11 20:17 
Danke für deine Antwort, aber das habe ich auch schon versucht geht nicht weil ausgerechnet Networkstream das nicht unterstützt und zwar keine der coolen Eigenschaften das ich was rausfiltern kann.
Den Code habe ich gerade nicht hier, versuche ihn aber mal kurz ausm Kopf zu holen;).

Client:
ausblenden C#-Quelltext
1:
2:
BinaryFormatter bFormatter = new BinaryFormatter();
bFormatter.Serialize(nstream, kdaten);


Server:
ausblenden C#-Quelltext
1:
2:
BinaryFormatter bFormatter = new BinaryFormatter();
kdatan = (Kunde)bFormatter.Deserialize(nstream);


Wie du schon gesagt hast wäre das cool wenn ich da Positionen festlegen könnte von wo bis wo er lesen soll, nur das diese Eigenschaften nicht gehen.
Jetzt ist nur die Frage wie könnte man das machen.
Trashkid2000
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 561
Erhaltene Danke: 137



BeitragVerfasst: Mi 18.05.11 20:30 
Na mit dem Code ist die Ganze Sache doch schon klarer.
Wie sieht denn die Klasse zum Objekt "kdaten" aus?

Ein Objekt vom Typ "Kunde", und noch ein paar andere?
Dann deserialisere doch den Strem zu dem was es ist, also zu dem Typ, der "kdaten" ist. Und dann greife auf die Properies des deserialisierten Objektes zu.
Trashkid2000
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 561
Erhaltene Danke: 137



BeitragVerfasst: Mi 18.05.11 20:31 
sorry, Doppelpost


Zuletzt bearbeitet von Trashkid2000 am Do 19.05.11 08:08, insgesamt 1-mal bearbeitet
Trashkid2000
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 561
Erhaltene Danke: 137



BeitragVerfasst: Mi 18.05.11 20:32 
sorry, Doppelpost


Zuletzt bearbeitet von Trashkid2000 am Do 19.05.11 08:08, insgesamt 1-mal bearbeitet
paddy14 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 122



BeitragVerfasst: Mi 18.05.11 20:49 
Ja das geht ja auch ich kann immer ein und das selbe Objekt de- und serialisieren das ist nicht das Problem, es ist eher wenn ich dann danach das gleiche mit einem anderen Objekt machen möchte dann geht das nicht weil schon was im Networkstream steht(und zwar das andere Objekt), sprich der Stream hat dann 2 Objekte drinn, ich kann aber immer nur eines Casten und genau da liegt der Fehler, wenn ich das so richtig sehe.

Die klasse habe ich gerade nicht im Kopf, aber nichts großartiges, ich spiele gerade mit den Stream nen bissl rum damit ich mir dann mal ein geiles Projekt ausdenken kann.
Trashkid2000
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 561
Erhaltene Danke: 137



BeitragVerfasst: Mi 18.05.11 21:18 
user profile iconpaddy14 hat folgendes geschrieben Zum zitierten Posting springen:
Ja das geht ja auch ich kann immer ein und das selbe Objekt de- und serialisieren das ist nicht das Problem...
Ja, so funktioniert ja auch Serialisierung. Das Objekt, das Du serialisierst, bekommst Du auch nach der Deserialisierung wieder zurück.
Also, solltest Du Dir (wie schonmal gesagt), wenn Du denn mehrere Objekte unterschiedlichen Typs übertragen willst, eine Klasse machen, die diese Objekte als Properties hat, und die Du dann nach dem Deserialisieren wieder abrufen kannst.
Wenn Du mehrere Objekte gleichen Typs übertagen willst, so eignet sich eine List<> oder ein Array.
paddy14 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 122



BeitragVerfasst: Mi 18.05.11 21:33 
Ok danke dir, aber ich steh gerade aufm Schlauch was du damit meinst
Zitat:
Also, solltest Du Dir (wie schonmal gesagt), wenn Du denn mehrere Objekte unterschiedlichen Typs übertragen willst, eine Klasse machen, die diese Objekte als Properties hat, und die Du dann nach dem Deserialisieren wieder abrufen kannst.


Wie müsste das denn aussehen, könntest du mir ein bsp. geben.

Danke.
Trashkid2000
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 561
Erhaltene Danke: 137



BeitragVerfasst: Do 19.05.11 08:44 
Moin,

naja, angenommen, Du hast eine Klasse, in der alle Objekte, die denn übertragen werden sollen, drin enthalten sind. Wie z.B. diese hier:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
[Serializable()]
public class TransportData
{
   private DateTime transportDate;
   public DateTime TransportDate
   {
      get { return transportDate; }
      private set { transportDate = value; } 
   }

   private IEnumerable<Kunde> kunden;
   public IEnumerable<Kunde> Kunden
   {
      get { return kunden; }
      private set { kunden = value; }
   }

   public TransportData(DateTime transportDate, IEnumerable<Kunde> kunden)
   {
      TransportDate = transportDate;
      Kunden = kunden;
   }
}
Dann könntest Du das Objekt der Klasse, die zum Transport erstellt wird, serialisieren und auf der Gegenseite dann auch wieder zu einem Objekt des Typs "TransportData" deserialisieren. Und dann halt auf die Properties des Objektes zugreifen, um an die "Einzeldaten" zu kommen.