Alp*_*pha 15 .net serialization json localization json.net
我已经苦苦挣扎了几个小时,没有好结果.我正在尝试使用.NET JSON Serializers将JSON从UI来回转换为对象.
问题出现在小数位上,因为我的文化标准有","作为小数分隔符而不是".".我已经尝试实现自定义转换器(请参阅此问题),但效果不佳.
我还检查了NewtonSoft JSON.net没有更好的结果.到目前为止,似乎与价值类型的匹配是文化不变的.我想覆盖这种行为,该怎么做?
顺便说一句,我真的希望避免在javascript端进行本地化.我绝对希望.NET能够处理跨文化格式化和本地化,我不认为应该有像我用这个序列化器一样的异常,我的猜测是应该有一个正确的方法来做到这一点.
提前致谢.
Bri*_*ers 16
用于序列化十进制值的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();
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
["1,1","3,14","-0,9","1000,42"]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11287 次 |
| 最近记录: |