Dot-Net
JSON序列化時如何本地化?
我已經掙扎了幾個小時了,沒有好的結果。我正在嘗試使用 .NET JSON 序列化程序將 JSON 從 UI 來迴轉換為對象。
小數出現問題是因為我的文化標準將“,”作為小數分隔符而不是“。”。我試過實現一個自定義轉換器(見這個問題)沒有好的結果。
我還檢查了 NewtonSoft JSON.net 沒有更好的結果。到目前為止,與值類型的匹配似乎是文化不變的。我想覆蓋這種行為,怎麼做?
順便說一句,我真的希望避免在 javascript 方面進行本地化。我絕對希望 .NET 來處理跨文化格式和本地化,我不認為應該有像我在這個序列化程序中發現的例外,我的猜測是應該有一個正確的方法來做到這一點。
提前致謝。
序列化十進制值的 JSON 標準不提供本地化格式。(請參閱JSON.org。)這就是為什麼值總是使用 Invariant 文化進行格式化的原因。
如果您需要本地化值,那麼您需要為您選擇的序列化程序創建一個自定義轉換器,它將小數輸出為預先格式化的字元串。在 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"]