5 Stimmen

DataMember Emit Standardwert

Ich habe eine .Net-Webdienstfunktion, die einen String akzeptieren kann.

Diese Funktion serialisiert dann diesen String zu JSON, aber ich möchte ihn nur serialisieren, wenn sein Wert nicht "" ist.

Ich habe diese Anleitungen gefunden:

http://msdn.microsoft.com/en-us/library/aa347792.aspx

[DataContract]
public class MyClass
{
   [DataMember (EmitDefaultValue=false)]
   public string myValue = ""
}

Leider kann ich den myValue nicht vor der Serialisierung verstecken, weil "" nicht der Standardwert für einen String in .Net ist (wie dumm ist das!)

Eine von zwei Optionen ist aufgetreten

  1. Auf dem Webdienst eine Art Attribut haben, das das "" auf null setzt

  2. Eine Bedingung in der Klasse haben

Ich würde die erste Option bevorzugen, da sie den Code sauberer macht, aber eine Meinung wäre großartig.

Danke

7voto

Steve Greatrex Punkte 15429

Sie können explizit festlegen, was der Standardwert ist (zum Zwecke der Serialisierung) mithilfe der Klasse DefaultValueAttribute:

[DataContract]
public class MyClass
{
    [DataMember (EmitDefaultValue=false)]
    [DefaultValue("")]
    public string myValue = ""
}

0voto

krisragh MSFT Punkte 1908

Ich denke, du hast hier mindestens ein paar Optionen. Es ist zusätzliche Arbeit, aber es lohnt sich.

  • Du kannst den String in einen Referenztyp einschließen. Da Referenztypen null sind, wenn sie nicht vorhanden sind, weißt du sofort, ob ein String vorhanden war oder nicht (weil der umschließende Referenztyp entweder nicht null wäre, wenn der String nicht leer ist.)

  • Eine letzte Option, die du hast, ist das Hinzufügen einer zusätzlichen ergänzenden Variablen (vielleicht ein boolescher Wert), die in OnDeserializing/OnDeserialized/OnSerializing/OnSerialized gesetzt wird und dies verwenden, um zu verfolgen, ob tatsächlich etwas auf dem Draht war. Du könntest zum Beispiel diese ergänzende Variable nur auf true setzen, wenn du tatsächlich einen nicht leeren String serialisierst und ähnlich.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X