Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

11

03.08.2015, 12:12

Sry wenn ich was missverstanden habe, aber wie meint ihr das mit der Serialisierung?

Also einen Serialisierer für die Objektgrößenerkennung nutzen?


@BlueCobold

wie meinst du das mit foreach(i) return i;

wo benutze ich das ? ?(

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

12

03.08.2015, 12:13

Nachtrag: das Schreiben der Nachricht hatte (durch Unterbrechung) wohl etwas zu lange gedauert...

Diese Prüfung so hinzubekommen, dass sie funktioniert, dürfte sehr schwer werden oder auch gar nicht funktionieren. Abgesehen von den Namespaces unterhalb von System gibt es genauso welche unter Microsoft und Windows (soweit ich weiß, zumindest), welche grundsätzlich vorhanden sind.
Weiterhin erstreckt sich das .NET Framework über mehrere Assamblies, also muss man sehr weitreichend bei der Prüfung vorgehen.
Nach wie vor kann es Leute geben, die ihre Zeug bestimmten Namespaces hinzufügen oder ihre Assamblynamen genau so wählen, dass deine Prüfung fehlschlägt.

Und eigentlich hätte schon die erste Frage (nicht erst irgendwo mittendrin) in diesem Thread sein sollen: wofür das Ganze? Was soll das bringen? Ich kann mir nichts vorstellen, was man damit effektiv machen sollte, was sich mit einem saubern Design auch anders angehen lässt.
Weiterhin lässt sich so vielleicht feststellen, ob etwas Teil des .NET Framework bzw. der "Standardbibliotheken" ist, aber nicht, ob es Code ist, den "man selbst" geschrieben hat.
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

13

03.08.2015, 12:24

wo benutze ich das ? ?(

Da:

C#-Quelltext

1
2
3
4
foreach (var item in collection)
{
    return GetBytes(item); 
}
Und wie gesagt tut das nicht das, was Du vermutlich meinst. Und genau deswegen macht man Serialisierung nicht selbst, da geht viel zu viel schief.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

14

03.08.2015, 12:30

Mit Serialisierung ist das Umwandeln von Objekten (Laufzeit) in eine binäre oder textuelle Form gemeint, die dann in Dateien/Datenbanken gespeichert oder per Netzwerk übertragen werden könnte. Die Deserialisierung ist der Umgekehrte Schritt, bei dem aus diesen Daten wieder die richtigen Objekte erzeugt werden.
Du scheinst aus einem übergebenen Objekt die einzelnen Bytes, also eine binäre Repräsentation, erhalten zu wollen, was effektiv eine Serialisierung ist.
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

15

03.08.2015, 12:32

@BlueCobold

ich will dich nicht nerven, aber wieso ist das "Serialisieren"

C#-Quelltext

1
if (current is IEnumerable && !(current is IDictionary))             {                 var collection = (IEnumerable)current;                  foreach (var item in collection)                 {                     return GetBytes(item);                 }             }


Wenn z.B eine Liste von z.B strings übergeben wird, dann muss ich ja einzeln über die Elemente iterieren, um dann wiederum "GetBytes" rekursiv auf das einzelne Element anzuwenden? wieso ist das denn "Serialisieren"? (sry, ich verstehe es nicht^^)

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

16

03.08.2015, 12:37

Was "Serialisieren" ist, habe ich schon beschrieben.
Was du machst ist über die Liste der Strings (um beim Beispiel zu bleiben) zu iterieren und bereits zum ersten die Rückgabe von "GetBytes" zurückzugeben. Im Grunde hast du also keine Iteration, da immer nur das 1. Elemente betrachtet wird, da danach dann ein "return" folgt, wodurch sowohl die Schleife, als auch die Methode verlassen werden.
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

Tobiking

1x Rätselkönig

  • Private Nachricht senden

17

03.08.2015, 12:42

Beim return ist wohl eher yield return gemeint. Aber von mir auch der Tipp, setz dich mit dem Thema Serialisierung auseinander und nutz das was dir das .NET Framework bereits bietet. Vermutlich reicht dir der interne Serializer oder ein 3rd party, und wenn nicht solltest du deinen Formatter an die vorhandene Infrastruktur anpassen, dann bist du deutlich flexibler.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

18

03.08.2015, 12:58

dann muss ich ja einzeln über die Elemente iterieren,
Klar. Aber Dein Code returned nach dem ersten Eintrag. Alle anderen werden gar nicht betrachtet und vollkommen ignoriert.

Beim return ist wohl eher yield return gemeint.
Das ging wohl.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

19

03.08.2015, 18:21

Danke erstmal :)

Ok ich habe mich zu Protobuf durch gerungen. ^^

Nun das Problem:

In der Funktion "GetBytes" erwarte ich ein objekt vom Typ "object"


C#-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public static byte[] GetBytes(object current) 
 {
            using (var memory = new MemoryStream())
            {
                MyClass d = new MyClass();
                d.a = 130293;
                d.b = "dhshhsd";
                d.c = new TimeSpan();
                d.d = DateTime.Now;

                Serializer.Serialize(memory, d);
                var o = Serializer.Deserialize<byte[]>(memory);
                return o;
            }
            return null;

das geht!

C#-Quelltext

1
2
3
4
5
6
7
8
9
public static byte[] GetBytes(object current) 
 {
            using (var memory = new MemoryStream())
            {
Serializer.Serialize(memory, current);
                var o = Serializer.Deserialize<byte[]>(memory);
                return o;
            }
            return null;


das geht nicht!

aber wenn das objekt von MyClass erst zur Laufzeit an "object current" übergeben wird, sagt er: "Only - Data - Contract classes can be serialized" ?? wieso, nur weil die Klasse übergeben wird und der Typ direkt klar ist?!?

Bitte um Hilfe :S

20

03.08.2015, 18:39

Ich habe es selber hinbekommen^^

Man muss die "Serializer.NonGeneric" varianten nutzen :S

Werbeanzeige