2016-01-21 43 views
2

如何知道json中的項目的值爲null時的差異。或者如果該值在json中完全沒有。兩者都將在Entityobject中以null結尾。 (瞎編)。你如何知道結果空值之間的差異?

public class Entityobject 
    { 
     public Document document { get; set; } 
     public int randomint { get; set; } 
     public string randomstr{ get; set; } 
    } 

Entityobject entity_obj= JsonConvert.DeserializeObject<Entityobject>(json); 

因此,例如,如果JSON是:

String json = "{ 
randomstr = null, 
randomint = 1 
}" 

現在文件將是空的,當然好。但是我怎麼知道它們的區別呢?爲了澄清我無法預先設置其他值。而我其實更喜歡更好的答案:只要創建另一個對象,其他初始值則爲空。另外我還想在json中發送null。所以我也不能發送另一個值(如「刪除」左右),然後將其設置爲空。 因此,要結束這個問題:我想知道在json中給出的null和由於未包含在json字符串中而發生的null之間的區別。

希望這已經夠清楚了。預先感謝您:)

+0

你只是想測試一個特定的JSON字符串擁有財產?或者你還想反序列化到'Entityobject'? –

回答

1

這不是很簡單的,但你可以精心的對象,以便調用setter方法將設置的屬性另一個領域:

class Foo 
{ 
    private string _bar; 
    public string Bar 
    { 
     get { return _bar; } 
     set 
     { 
      _bar = value; 
      BarSpecified = true; 
     } 
    } 

    [JsonIgnore] 
    public bool BarSpecified { get; set; } 
} 

如果Bar出現在JSON ,BarSpecified將是真實的,否則將是錯誤的。

請注意,名稱BarSpecified不是隨機選擇;後綴Specified對於JSON.NET(以及XmlSerializer)具有特殊含義:它控制是否對該屬性進行序列化。因此,如果反序列化對象並重新序列化它,則新的JSON將與原始JSON相同(根據該屬性是否存在於JSON中)。

+0

很好的答案,很好學習。去嘗試這個和其他答案。也許回答我自己或接受你們其中的一個:) – Riddim

1

您可以爲您的EntityObject中的每個字段設置默認值。這樣,您可以確保如果該值真的等於null它明確指定null

例如(C#5):

public class Entityobject 
{ 
    private Document _document = Document.EmptyDocument; 
    public Document document 
    { 
     get 
     { 
      return _document; 
     } 
     set 
     { 
      _document = value; 
     } 
    } 

    private int? _randomint = 0; 
    public int? randomint 
    { 
     get 
     { 
      return _randomint; 
     } 
     set 
     { 
      _randomint = value; 
     } 
    } 

    private string _randomstr = String.Empty; 
    public string randomstr 
    { 
     get 
     { 
      return _randomstr; 
     } 
     set 
     { 
      _randomstr = value; 
     } 
    } 
} 

即使在容易C#6:

public class Entityobject 
{ 
    public Document document { get; set; } = Document.EmptyDocument; 
    public int randomint { get; set; } = 0; 
    public string randomstr{ get; set; } = String.Empty; 
} 
+0

就像我說的,我其實不想這樣做...但也許它仍然是最好的解決方案。我會嘗試一些事情,也許回答我自己或接受你們中的一個:)。 – Riddim

+0

是的,我注意到了,但我不確定你在這種情況下有多少選擇。沒有使用默認值@Thomas Levesque的答案似乎是最好的選擇。 –