2013-07-26 44 views

回答

22

您必須編寫自己的自定義JsonConverter並使用它來攔截decimal類型,以便您可以更改它的序列化方式。這裏有一個例子:

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();  
    } 
} 

要使用它,只需在這個自定義轉換器的一個新實例傳遞給SerializeObject方法:

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

注意的是,文化應該在的String.format指定。否則,你可能會得到奇怪的'錯誤'。 –

+8

可能對某人有用:如果您不希望輸出圍繞該值的雙引號,則可以使用WriteRawValue而不是 –

+1

{0:N2}將包含逗號。如果您使用WriteRawValue並且逗號是字符串的一部分,您將收到錯誤。 – Karson