10進値をシリアル化するためのJSON標準では、ローカライズされた書式設定が提供されていません。 (JSON.orgを参照してください)。このため、値は常に不変のカルチャでフォーマットされています。
ローカライズされた値が必要な場合は、選択したシリアライザ用のカスタムコンバータを作成して、小数点をあらかじめフォーマットされた文字列として出力する必要があります。以下に示すようにJson.Netでは、これは簡単に行うことができます。
class Program
{
static void Main(string[] args)
{
List<decimal> values = new List<decimal> { 1.1M, 3.14M, -0.9M, 1000.42M };
var converter = new FormattedDecimalConverter(CultureInfo.GetCultureInfo("fr-FR"));
string json = JsonConvert.SerializeObject(values, converter);
Console.WriteLine(json);
}
}
class FormattedDecimalConverter : JsonConverter
{
private CultureInfo culture;
public FormattedDecimalConverter(CultureInfo culture)
{
this.culture = culture;
}
public override bool CanConvert(Type objectType)
{
return (objectType == typeof(decimal) ||
objectType == typeof(double) ||
objectType == typeof(float));
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
writer.WriteValue(Convert.ToString(value, culture));
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
throw new NotImplementedException();
}
}
出力:確かに
["1,1","3,14","-0,9","1000,42"]
ありがとうございます答えに時間をとるためのロット。質問は少し古いですが、私はまだこれらの問題に近づける方法を学ぶことに感謝しています。再度、感謝します! – Alpha
喜んで助けてください。明けましておめでとうございます! –