当前位置: 首页 > 面试题库 >

JSON序列化时如何本地化?

林运浩
2023-03-14
问题内容

我已经奋斗了几个小时,没有取得好结果。我正在尝试使用.NET JSON序列化程序将JSON从UI来回转换为对象。

小数引起了问题,因为我的文化的标准使用“,”作为小数分隔符而不是“。”。我尝试实现自定义转换器,但效果不佳。

我还检查了NewtonSoft JSON.net,但没有得到更好的结果。到目前为止,似乎与值类型的匹配是文化不变的。我要覆盖此行为,该怎么办?

顺便说一句,我真的很想避免在javascript方面进行本地化。我绝对希望.NET负责跨文化的格式设置和本地化,我不认为应该有像使用此序列化程序那样的例外,我想应该有一种适当的方法来做到这一点。

提前致谢。


问题答案:

用于序列化十进制值的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"]


 类似资料:
  • 问题内容: 我很好奇序列化和反序列化的方式。我使用关键字“ json”和“ tuple”进行搜索,但找不到所需的内容。 问题答案: 我通过和Json.net进行测试,测试代码如下。结果显示可序列化和可反序列化。因此,我可以在应用程序中使用它们。 测试代码 注释 在将序列化到字符串{“项目1”:“一”,“项目2”:“嘻嘻”,“项目3”:真正},并且它可以被反序列化回类型。

  • 我怎么才能修好这个?我需要用JSON编写响应。一个解决方案是非常赞赏的。

  • 问题内容: 我正在尝试使用Northwind OData服务: http://services.odata.org/V3/OData/OData.svc/Products?$format=json 并将其反序列化为一系列产品: 但是序列化器似乎不喜欢该部分,并且事实是那里有2 条记录(不确定它们是什么)。 是否有捷径可寻? 问题答案: 使用Json.Net

  • 问题内容: 我的直觉告诉我,必须以某种方式将其转换为字符串或byte [](在Go中甚至可能是相同的东西?),然后将其保存到磁盘。 我找到了这个包(http://golang.org/pkg/encoding/gob/),但似乎仅用于结构? 问题答案: 序列化数据有多种方法,Go为此提供了许多软件包。某些常见编码方式的软件包: 处理地图很好。以下示例显示了地图的编码/解码: 操场

  • 问题内容: 我需要将一些对象序列化为JSON并发送到WebService。如何使用org.json库?否则我将不得不使用另一个?这是我需要序列化的类: 我只放置了类的变量和构造函数,但也包含了getter和setter方法。所以如果有人可以帮忙 问题答案: 没有注释的简单方法是使用Gson库 就那么简单:

  • 虽然可以在Java 8中序列化lambda,但强烈建议不要这样做;甚至不鼓励序列化内部类。给出的原因是lambdas可能无法在另一个JRE上正确反序列化。然而,这是否意味着有一种方法可以安全地序列化lambda? 例如,假设我定义一个类如下: 如果像这样声明了类的实例,则不应序列化它: 但如果我创建一个这样的类实例,会怎么样: 现在序列化是安全的吗?我的直觉告诉我,是的,它应该是安全的,因为没有理