2010-03-09 13 views
5

Ich mag einfach ein Nullable-Bool serialisiert werden, indem sie es in einen StringWie kann ich nullable <bool> serialisieren?

public static string SerializeNullableBoolean(bool? b) 
{ 
    if (b == null) 
    { 
     return "null or -1 or .."; // What to return here? 
    } 
    else 
    { 
     return b.ToString(); 
    } 
} 

Was Umwandlung ist die am besten geeignete Zeichenfolge als den Nullwert zu serialisieren?

+0

Vielen Dank an alle für Ihre Eingabe! –

+1

Sicher ist es: 'true',' false' und 'FileNotFound'! (Nicken Sie zur DailyWTF Seite). – Skizz

Antwort

8

Da bool.ToString() "True" oder "False" zurückgibt, würde ich mit "Null" gehen. Ich würde das auch neu schreiben als:

return b.HasValue ? b.ToString() : "Null"; 

Edit: Ich nehme das zurück. bool? .ToString() gibt einen leeren String zurück, also würde ich entscheiden, was bequemer ist. Wenn eine Person die Ausgabe lesen muss, ist "Null" eine bessere Wahl. Wenn es nur in Code verwendet werden muss, ist eine leere Zeichenfolge in Ordnung. Wenn Sie mit leeren String gehen, ist es so einfach wie:

return b.ToString(); 
2

Ich würde eine leere Zeichenfolge auswählen, um den Nullwert darzustellen.

2

Wenn Sie True/False für echte bool Werte zurückgeben, sollten Sie Null aus Gründen der Symmetrie zurückgeben, falls bnull ist.

2

Seien konsistent.

b.ToString() 

gibt die Strings 'true' oder 'false' zurück. Wenn Sie also -1 zurückgeben, wird es weniger konsistent, wenn Sie die serialisierten Dateien tatsächlich lesen. Der Deserialisierungscode wird auch "hässlicher" und weniger lesbar.

Ich würde wählen, es entweder zu der Zeichenkette 'unset' (oder etwas in diesen Zeilen) oder der Zeichenkette 'null' zu serialisieren. Es sei denn, Sie haben wirklich strenge Platzanforderungen oder wirklich große Datensätze, um die zusätzlichen Zeichen zu serialisieren, sollte eigentlich keine Rolle spielen.

8

Warum nicht:

b.ToString() 

Wenn b null ist, dann gibt es eine leere Zeichenfolge. Da dies der Rahmen ist, würde ich es konsistent verwenden. Dies ist auch, was XmlSerializer für Nullable-Skalare verwendet.

1

Wenn Sie mit der in XmlSerializer gebaut Sie auch den Wert der folgenden serialisiert tun können (und viele hässliche benutzerdefinierte Serialisierung Code verhindern):

[Serializable] 
    public class Foo 
    { 
     [XmlIgnore] 
     public bool? Bar { get; set; } 

     [XmlAttribute("Bar")] 
     [EditorBrowsable(EditorBrowsableState.Never)] 
     public string xmlBar 
     { 
      get { return Bar.ToString(); } 
      set 
      { 
       if (string.IsNullOrEmpty(value)) Bar = null; 
       else Bar = bool.Parse(value); 
      } 
     } 
    } 
+0

Ich habe tatsächlich nicht überprüft, ob der XmlSerializer eine NULL-fähige bool korrekt behandelt, so dass dies möglicherweise nicht benötigt wird. – Gord

0

Persönlich würde ich nicht von der Verwendung oben, aber verwenden Sie einfach die ShouldSerialize-Schnittstelle. Zum Beispiel

[XmlElement("SomeBoolean ", Namespace = "SomeNamespace")] 
public bool? SomeBoolean { get; set; } 
public bool ShouldSerializeSomeBoolean() { return SomeBoolean.HasValue; } 
Verwandte Themen