2016-03-09 65 views
1

我正在使用Json.net序列化器來序列化objects.It正在完美工作。現在根據我的要求,我已經使用JsonDotNetCustomContractResolvers從一個對象中排除屬性。但對於下面的show對象,我需要排除它的所有屬性。如何在Newtonsoft json中如果跳過序列化對象?

Partial Public Class CreditCard 
    <Key> _ 
    Public Property ID As Integer 
    Public Property CustomerID As Integer 
    Public Property CardType As String 
    Public Property Last4Digit As String 
    Public Property ExpiryDate As String 
    Public Property Token As String 
    Public Property IsPrimary As Boolean 
End Class 

而當我這樣做時,我得到了我想要的結果。結果如下圖所示。

enter image description here 這裏的屬性被排除在外,但null對象仍然是序列化的。是否有任何方法可以跳過在Newtonsoft JSON中空對象的序列化。

+0

你的問題有點不清楚。爲了澄清,你有'CreditCard'對象列表,並且想要跳過所有屬性爲'null'的序列化實例,是否正確?'CreditCard'本身非空,對嗎? – dbc

+0

此外,爲什麼您要使用自定義合約解析器?設置['JsonSerializerSettings.N ullValueHandling = NullValueHandling.Ignore'](http://www.newtonsoft.com/json/help/html/P_Newtonsoft_Json_JsonSerializerSettings_NullValueHandling.htm)?或['DefaultValueHandling = DefaultValueHandling.Ignore'](http://www.newtonsoft.com/json/help/html/T_Newtonsoft_Json_DefaultValueHandling.htm)? – dbc

+0

是的,我想跳過序列化所有屬性爲空的實例。 - @ DBC –

回答

1

我寫了一個快速測試應用程序,向您展示您可能想要嘗試的內容。 對於Json.Net,JsonObject有一個很好的屬性,加上設置MemberSerialization.OptIn。這意味着只有JsonProperty的屬性纔會被序列化。

public class JsonNet_35883686 
{ 
    [JsonObject(MemberSerialization.OptIn)] 
    public class CreditCard 
    { 
     [JsonProperty] 
     public int Id { get; set; } 
     public int CustomerId { get; set; } 
    } 

    public static void Run() 
    { 
     var cc = new CreditCard {Id = 1, CustomerId = 123}; 
     var json = JsonConvert.SerializeObject(cc); 
     Console.WriteLine(json); 

     cc = null; 
     json = JsonConvert.SerializeObject(cc); 
     Console.WriteLine(json); 
    } 
} 

運行的輸出是(的原因Id序列化是因爲我用JsonProperty

{"Id":1} 
null 

希望這有助於。

相關問題