7
我使用Newtonsoft.Json.JsonSerializer序列化小數。JsonSerializer - 使用'N2'格式化序列化小數位
如何將它設置爲只有小數點後1位的十進制數才能在最後使用0。
即3.5序列化爲「3.50」?
我使用Newtonsoft.Json.JsonSerializer序列化小數。JsonSerializer - 使用'N2'格式化序列化小數位
如何將它設置爲只有小數點後1位的十進制數才能在最後使用0。
即3.5序列化爲「3.50」?
您必須編寫自己的自定義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());
注意的是,文化應該在的String.format指定。否則,你可能會得到奇怪的'錯誤'。 –
可能對某人有用:如果您不希望輸出圍繞該值的雙引號,則可以使用WriteRawValue而不是 –
{0:N2}將包含逗號。如果您使用WriteRawValue並且逗號是字符串的一部分,您將收到錯誤。 – Karson