[英]Json.net serialize numeric properties as string
我正在使用 JsonConvert.SerializeObject 來序列化模型對象。 服務器期望所有字段都是字符串。 我的模型對象具有數字屬性和字符串屬性。 我無法向模型對象添加屬性。 有沒有辦法序列化所有屬性值,就好像它們是字符串一樣? 我必須只支持序列化,而不是反序列化。
您甚至可以為數字類型提供自己的JsonConverter
。 我剛剛嘗試過這個並且它有效 - 它既快速又臟,而且您幾乎肯定希望擴展它以支持其他數字類型( long
、 float
、 double
、 decimal
等),但它應該可以幫助您:
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.