Wie wird das null-Array in c # auf null deserialisiert?

10

Hier ist meine Klasse:

%Vor%

Wenn ich ein Objekt dieser Klasse serialisieren:

%Vor%

Es wird wie erwartet gedruckt (xml-Header und Standard-MS-Namespaces werden weggelassen):

%Vor%

Als ich dieses XML genommen habe und versucht habe, es zu deserialisieren, bin ich festgefahren, weil es immer "Nicht null" ausgibt:

%Vor%

Wie erzwinge Deserializer, um meine Liste null zu machen, wenn es in xml null ist?

    
Aen Sidhe 30.03.2010, 09:56
quelle

4 Antworten

2

Ach, nervig ist es nicht. Sie können dies sehen, indem Sie sgen.exe in Ihrer Assembly mit den Optionen / keep und / debug ausführen, damit Sie den Deserialisierungscode debuggen können. Es sieht ungefähr so ​​aus:

%Vor%

Nicht weniger als 3 Stellen, an denen sichergestellt wird, dass die @ To-Eigenschaft nicht null ist. Die erste ist etwas vertretbar, schwer zu deserialisieren Daten, wenn die Struktur nicht existiert. Der zweite macht den Null-Test wieder , das ist der einzige wirklich gute. Die dritte ist das Problem, ReadNull () hat true zurückgegeben, aber es noch erstellt einen Nicht-Null-Eigenschaftswert.

Wenn Sie zwischen leer und null unterscheiden wollen, dann haben Sie keine gute Lösung, aber bearbeiten Sie diesen Code von Hand. Tun Sie dies nur, wenn Sie wirklich verzweifelt sind und die Klasse zu 100% stabil ist. Tue es nicht. João's Lösung ist die einzig gute.

    
Hans Passant 30.03.2010, 10:32
quelle
3

Wenn Sie ein Array anstelle einer Liste verwenden, funktioniert es wie erwartet

%Vor%     
Justin 28.01.2014 14:03
quelle
0

Ich stimme @ Oliver's Kommentar zu, aber Sie können es so lösen, wenn Sie es absolut brauchen, um null zurückzugeben. Erstellen Sie anstelle einer automatischen Eigenschaft ein eigenes Hintergrundfeld.

%Vor%     
Mikael Svenson 30.03.2010 10:11
quelle
0

Wenn Sie wirklich benötigen, dass eine Sammlung zu null deserialisiert wird, wenn keine Werte zur Verfügung gestellt werden, können Sie dies tun, indem Sie keinen set -Accessor wie folgt bereitstellen:

%Vor%     
João Angelo 30.03.2010 10:29
quelle