簡體   English   中英

Json.net 將數字屬性序列化為字符串

[英]Json.net serialize numeric properties as string

我正在使用 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));
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM