一尘不染

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

json

我正在使用JsonConvert.SerializeObject序列化模型对象。服务器希望所有字段都为字符串。我的模型对象具有数字属性和字符串属性。我无法将属性添加到模型对象。有没有一种方法可以将所有属性值序列化为字符串?我必须仅支持序列化,而不支持反序列化。


阅读 236

收藏
2020-07-27

共1个答案

一尘不染

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));
    }
}
2020-07-27