Ich habe eine Klasse in einem WCF-Dienst, nennen wir sie A . A ist ein Datenvertrag, der als eines seiner DataMembers eine Sammlung eines anderen benutzerdefinierten Objekts B enthält. Um Nullreferenzprobleme auf der Clientseite zu vermeiden, instanziiere ich die BList im Konstruktor wie folgt:
%Vor%Mein Problem ist, dass auf dem Client diese Instanziierung nicht stattfindet und BList als null erscheint, nachdem ein Objekt von A auf dem Client erstellt wurde. Ich vermute, dass der Konstruktor nicht auf dem Client erscheint. Muss ich also den Konstruktor zu einem expliziten Operationsvertrag machen? Wenn das der Fall wäre, würde das dem Klienten interne Dinge sichtbar machen, die sie nicht sehen sollten, oder? Wie stelle ich sicher, dass diese Instanziierung auf dem Client passiert?
Danke, und tut mir leid, wenn das wie eine dumme Frage erscheint.
Sie müssen die Attribute [OnDeserializing] oder [OnDeserialized] verwenden, um die Initialisierung von DataContract-Typen durchzuführen. Siehe Ссылка
Ich bin nicht sicher, ob es eine Möglichkeit gibt, dies zu tun, aber indem ich die neue Instanz aus dem Dienst lade, sollte die Liste initialisiert werden, schlage ich folgendes vor:
Um die Instanz zu erstellen:
%Vor%Schreiben Sie im Service die Methode
%Vor%Tags und Links wcf .net c# serialization wcf-client