.NET Fiddle

CSharp · Console

/Program.cs

using System;
using Newtonsoft.Json;



public class ValueToStringConverter : JsonConverter
{
	public override bool CanRead => false;
	
	public override bool CanConvert(Type objectType) => objectType.IsValueType;
	
	public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
		=> throw new NotSupportedException();
	
	public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
	{
		var str = value?.ToString();
		writer.WriteValue(str);
	}
}


public class Model
{
	[JsonConverter(typeof(ValueToStringConverter))]
	public int IntValue {get; set;}

	[JsonConverter(typeof(ValueToStringConverter))]
	public Decimal DecimalValue {get; set;}
}



public class Program
{
	public static void Main()
	{
		var m = new Model()
		{
			IntValue = 42,
			DecimalValue = 3.1415926535897932384626433m
		};
		
		Console.WriteLine($"m.IntValue = {m.IntValue}");
		Console.WriteLine($"m.DecimalValue = {m.DecimalValue}");
		
		Console.WriteLine("----------------------------------------");
		
		var json = JsonConvert.SerializeObject(m);
		Console.WriteLine(json);
		
		Console.WriteLine("----------------------------------------");
		
		var deserializationResult = JsonConvert.DeserializeObject<Model>(json);
		
		Console.WriteLine($"m.IntValue == deserializationResultIntValue : {m.IntValue == deserializationResult.IntValue}");
		Console.WriteLine($"m.DecimalValue == deserializationResult.DecimalValue : {m.DecimalValue == deserializationResult.DecimalValue}");
		
		
		
	}
}
;