0

3131313 などの日本円 (つまり、指数がゼロの通貨) の金額を表す 10 進数がある場合、デフォルトで Json.NET が値を 3131313.0 にシリアル化していることがわかります。

代わりにリテラル値 3131313 をシリアル化する方法はありますか?

4

1 に答える 1

1

独自のコンバーターを実装することにより、次のようにシリアル化できます。

var str= JsonConvert.SerializeObject(
     new {s="aaa",d=(decimal)3131313},
     new MyConverter());

-

public class MyConverter : JsonConverter
{
    public override bool CanConvert(Type objectType)
    {
        if (objectType == typeof(decimal)) return true;
        return false;
    }

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

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        writer.WriteValue(Convert.ToInt64(value));
    }
}
于 2012-06-18T10:46:04.300 に答える