2011-05-04 81 views
4

我有一個.Net Web服務函數可以接受一個字符串。DataMember發送默認值

該函數將序列化該字符串爲JSON,但我只想要序列化它,如果它的值不是「」。

我發現這些指令:

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

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

可惜的是我不能隱藏從序列的myvalue的,因爲「」是不是一個字符串的.Net默認值(是多麼愚蠢! )

一兩個選項內容時發生

  1. Web服務上具有某種屬性的那臺「」爲空

  2. 對類的一些條件

我寧願第一,因爲它使代碼更清潔,但意見會很棒。

感謝

回答

0

我想你至少有一對夫婦選擇這裏。這是額外的工作,但值得。

  • 您可以將字符串封裝在引用類型中。由於引用類型爲空(如果不存在),可以讓您立即知道是否存在字符串(因爲封裝引用類型將爲非null或null,如果該字符串不爲空或不爲空)。

  • 最後一個選項是添加一個額外的互補變量(可能是一個布爾值),該變量在OnDeserializing/OnDeserialized/OnSerializing/OnSerialized上設置,並使用它來跟蹤線路上是否實際存在某些東西。您可能,例如,這種互補變量設置爲true,只有當你真正序列化出一個非空字符串,同樣

5

您可以明確設置的默認值是什麼(串行化的目的)使用DefaultValueAttribute等級:

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