動くコード図鑑技術記事現場の渡り方キャリア論すべての記事About
C#

定石4:カスタムJsonConverter —業務固有型の専用変換

出典: C# Newtonsoft.Json で業務系JSON処理を実戦投入する完全ガイド(.NET Framework 4.7.2 編)定石4:カスタムJsonConverter —業務固有型の専用変換

定石4:カスタムJsonConverter —業務固有型の専用変換 (csharp)#90fd64ac232b
// ✅定石4:金額用カスタムJsonConverter(書き出し時に円マーク付与など)
public class MoneyJsonConverter : JsonConverter<decimal>
{
    public override void WriteJson(JsonWriter writer, decimal value, JsonSerializer serializer)
    {
        writer.WriteValue(value);  //数値で書き出し(業務系では文字列化しない方が後段が楽)
    }
 
    public override decimal ReadJson(JsonReader reader, Type objectType,
        decimal existingValue, bool hasExistingValue, JsonSerializer serializer)
    {
        //数値・文字列どちらでも受けられるように寛容実装
        if (reader.TokenType == JsonToken.Integer || reader.TokenType == JsonToken.Float)
            return Convert.ToDecimal(reader.Value);
 
        if (reader.TokenType == JsonToken.String)
            return decimal.Parse((string)reader.Value);
 
        throw new JsonSerializationException($"Unexpected token type: {reader.TokenType}");
    }
}
 
//使い方:クラスのプロパティに [JsonConverter] 属性で適用
public class InvoiceDto
{
    public int InvoiceId { get; set; }
 
    [JsonConverter(typeof(MoneyJsonConverter))]
    public decimal Amount { get; set; }
}
▸ この snippet は実行結果未収録
▸ 実行結果は未収録です
  • id: #90fd64ac232b
  • lines: 30
  • extracted: 2026-06-10

Source収録記事

この snippet は記事の「定石4:カスタムJsonConverter —業務固有型の専用変換」セクションに登場する。コードの前後の文脈・ハマりどころの解説は記事本文で。

同じ記事から

5
図鑑トップ