Json.net将数字属性序列化为字符串

我正在使用JsonConvert.SerializeObject来序列化模型对象。 服务器期望所有字段都是字符串。 我的模型对象具有数字属性和字符串属性。 我无法向模型对象添加属性。 有没有办法将所有属性值序列化,就好像它们是字符串一样? 我必须只支持序列化,而不是反序列化。

即使是数字类型,您也可以提供自己的JsonConverter 。 我刚试过这个并且它有效 – 它快速而且很脏,你几乎肯定想扩展它以支持其他数字类型( longfloatdoubledecimal等),但它应该让你去:

 using System; using System.Globalization; using Newtonsoft.Json; public class Model { public int Count { get; set; } public string Text { get; set; } } internal sealed class FormatNumbersAsTextConverter : JsonConverter { public override bool CanRead => false; public override bool CanWrite => true; public override bool CanConvert(Type type) => type == typeof(int); public override void WriteJson( JsonWriter writer, object value, JsonSerializer serializer) { int number = (int) value; writer.WriteValue(number.ToString(CultureInfo.InvariantCulture)); } public override object ReadJson( JsonReader reader, Type type, object existingValue, JsonSerializer serializer) { throw new NotSupportedException(); } } class Program { static void Main(string[] args) { var model = new Model { Count = 10, Text = "hello" }; var settings = new JsonSerializerSettings { Converters = { new FormatNumbersAsTextConverter() } }; Console.WriteLine(JsonConvert.SerializeObject(model, settings)); } }