2017-03-14 1 views
0

ich tue Json Serialisierung mit NewtonSoft.JsonWie Conditional Serialisierung mit C# zu tun - NewtonSoft.Json

public class CommonBase 
{ 
    [JsonProperty(PropertyName = "u_customer_id")] 
    public long CustomerId { get; set; } 
} 

Ich möchte eine bedingte Serialisierung tun, so dass, wenn CustomerId Wert 0 ist, ich möchte ein setzen Leerwert für CustomerId während JSer Serialisierung. Seit CommonBase ist eine Basisklasse und ich bin nicht in der Lage, den Datentyp von long zu string zu ändern.

Wie kann ich das erreichen?

+0

Sie können Ihren eigenen benutzerdefinierten benutzerdefinierten Serializer schreiben. Beispiel hier: http://blog.maskalik.com/asp-net/json-net-implement-custom-serialization. Sie müssen 'WriteJson' und' ReadJson' Methoden – xszaboj

+0

@ xszaboj..i nicht bevorzugen, dass .. Ich nur überprüfen, obJson.Net bieten alle eingebauten Feature für diese oder jede Umgehungsmöglichkeit – vmb

+0

Was ist Ihr erwartetes Ergebnis? * "u_customer_id": null * oder * "u_customer_id": "" * oder diese Eigenschaft bei der Serialisierung überspringen? –

Antwort

0

Ich habe dieses Problem gelöst, indem ich die CustomerId-Eigenschaft als Nullable änderte.

public long? CustomerId { get; set; } 
1

Sie haben fast die Antwort in Ihrem Fragetitel. Was Sie suchen, ist Conditional Property Serialization

Sie müssen nur Methode wie folgt hinzufügen: ShouldSerialize + PropertyName. In Ihrem Fall sollte die Methode wie folgt aussehen:

public bool ShouldSerializeCustomerId() 
{ 
    return SomeCondition; 
} 

Ps.s. Wenn Sie eine Basisklasse erstellen, möchten Sie wahrscheinlich eine abstrakte Klasse haben.