2013-07-26 13 views

Odpowiedz

22

Będziesz musiał napisać własny niestandardowy JsonConverter i użyć go do przechwycenia typu decimal, aby zmienić sposób jego serializacji. Oto przykład:

public class DecimalFormatConverter : JsonConverter 
{ 
    public override bool CanConvert(Type objectType) 
    { 
     return (objectType == typeof(decimal)); 
    } 

    public override void WriteJson(JsonWriter writer, object value, 
            JsonSerializer serializer) 
    { 
     writer.WriteValue(string.Format("{0:N2}", value)); 
    } 

    public override bool CanRead 
    { 
     get { return false; } 
    } 

    public override object ReadJson(JsonReader reader, Type objectType, 
           object existingValue, JsonSerializer serializer) 
    { 
     throw new NotImplementedException();  
    } 
} 

Aby z niego skorzystać, wystarczy przejść w nowej instancji tego konwertera niestandardowej metody SerializeObject:

var json = JsonConvert.SerializeObject(yourObject, new DecimalFormatConverter()); 
+1

Należy zauważyć, że kultura powinna być określona w string.Format. W przeciwnym razie możesz dostać dziwne "błędy". –

+8

może być użyteczne dla kogoś: jeśli nie chcesz wypisać podwójnych cudzysłowów wokół wartości, możesz użyć 'WriteRawValue' zamiast: –

+1

{0: N2} będzie zawierać przecinki. Jeśli użyjesz WriteRawValue, a przecinki będą częścią ciągu, otrzymasz błąd. – Karson

Powiązane problemy