JSON序列化时如何本地化?

2023-12-01

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

小数会出现问题,因为我的文化标准使用“,”作为小数分隔符而不是“.”。我尝试过实现自定义转换器(请参阅this问题)没有好的结果。

我还检查了 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();
    }
}

Output:

["1,1","3,14","-0,9","1000,42"]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JSON序列化时如何本地化? 的相关文章

  • 如何使用c#/VB.NET在word中插入书签

    我正在尝试使用 C 在 Word 文档中添加书签 但它不起作用 而且我在 msdn 文档和互联网上都找不到任何帮助 这就是我正在尝试做的事情 我正在阅读 Word 文档 然后在该文档中搜索关键字 然后将该文本转换为超链接 效果很好 现在 我
  • 如果将其名称作为参数传递,如何在方法中打开表单

    我正在尝试创建一个标准方法来根据传递给它的参数打开表单 基本上 要完成此任务 using Quotes newQte new Quotes newQte ShowDialog 通过替换 Quotes with a passed parame
  • .NET 是否有相当于 Python 中的 **kwargs 的功能?

    我一直无法通过典型渠道找到这个问题的答案 在Python中我可以有以下函数定义 def do the needful kwargs Kwargs is now a dictionary i e do the needful spam 42
  • DI Control-Freak 反模式:难以理解

    我正在阅读 Mark Seemann 写的 NET 中的依赖注入 但我无论如何也无法理解这一点 虽然new当涉及到 VOLATILE 时 关键字是一种代码味道 依赖性 您无需担心将其用于稳定 依赖性 这new一般来说 关键字不会突然变得 非
  • Visual Studio 扩展找不到所需的程序集

    我为 Visual Studio 2013 编写了一个扩展 因为该死的组合框错误 https stackoverflow com questions 7800032 cancel combobox selection in wpf with
  • Struts2 中有多种结果类型?

    我有一个使用 Tiles 的 Struts2 应用程序 如何在操作映射中获取多种结果类型 因为我需要将de输出设置为JSON数据 并且同时Tiles 我努力了
  • 最新的反应式扩展 (Rx) 教程

    我对反应式扩展非常感兴趣 但我找不到最新的教程 我开始于使用 NET 响应式扩展消除异步忧郁症 http go microsoft com fwlink LinkId 208528但它已经过时了 我可以找出一些改变 但我无法让很多例子发挥作
  • 将 JSON URL 转换为 R 数据帧

    我在将 JSON 文件 从 API 转换为 R 中的数据帧时遇到问题 例如 URL 我尝试了 S O 的一些不同建议 包括将json数据转换为R中的数据框 https stackoverflow com questions 28683769
  • 我们可以在 javascript 和除 Literal 之外的其他部分使用资源表达式吗?

    The 文字控制一直有效
  • 以线程安全的方式获取随机数

    这是一篇描述随机数线程安全性的好文章 以线程安全的方式获取随机数 http blogs msdn com b pfxteam archive 2009 02 19 9434171 aspx 但我坚持使用 RandomGen2 示例 publ
  • 在c#中创建sql连接

    我是这个网站的新手 也是编程的新手 我目前正在通过销售点创建库存系统 它使用模态和非模态形式 我的问题是 我正在研究change password对话框必须连接到数据库才能覆盖密码字段 我使用的数据库是Microsoft SQL Serve
  • 计算从给定日期开始的月份中的第几天?

    我正在努力寻找一种简单有效的解决方案来计算每月的工作日 例如 如果给定日期是第一个星期一Monday 5th March 2018然后我想获取接下来 6 个月每个月第一个星期一的日期 例如 Monday 2nd April 2018 and
  • 数组与列表的性能

    假设您需要一个需要频繁迭代的整数列表 数组 我的意思是非常频繁 原因可能有所不同 但可以说它位于大容量处理的最内层循环的核心 一般来说 人们会选择使用列表 List 因为它们的大小具有灵活性 最重要的是 msdn 文档声称列表在内部使用数组
  • 下载 .NET 3.5 的实体框架

    哪个版本的实体框架 EF 我可以用在 NET 3 5我可以在哪里下载这个旧版本 对于 Net 3 5 您可以使用 EF v1 您是否尝试从以下位置下载 Microsoft NET Framework 3 5 Service Pack 1 h
  • InvalidOperationException:无法解析类型“Microsoft.AspNetCore.Http.IHttpContextAccessor”的服务

    我开始将我的 asp net core RC1 项目转换为 RC2 并面临现在的问题IHttpContextAccessor没有解决 为了简单起见 我使用 Visual Studio 模板创建了新的 ASP NET RC2 项目ASP NE
  • C# 创建包含多个文件的 ZIP 存档

    我正在尝试创建包含多个文本文件的 ZIP 存档 如下所示 Dictionary
  • 在 Javascript 中本地化字符串

    我目前正在使用 resx文件来管理我的 NET 服务器端资源 我正在处理的应用程序还允许开发人员将 JavaScript 插入各种事件处理程序中以进行客户端验证等 对我来说本地化 JavaScript 消息和字符串的最佳方法是什么 理想情况
  • C# 枚举 - 根据掩码检查标志

    我有以下枚举标志 Flags private enum MemoryProtection uint None 0x000 NoAccess 0x001 ReadOnly 0x002 ReadWrite 0x004 WriteCopy 0x0
  • 生成 .tail IL 指令的简单 F# 代码是什么?

    我想看看 tailIL 指令 但我一直在编写的使用尾部调用的简单递归函数显然已优化为循环 我实际上是在猜测这一点 因为我不完全确定反射器中的循环是什么样的 我绝对没有看到任何 tail不过操作码 我在项目的属性中检查了 生成尾部调用 我还尝
  • 检测 SignalR Hub 客户端立即断开连接

    SignalR Hub OnDisconnected 何时在服务器端引发 对于崩溃或关闭而不调用Stop method 我正在使用 SignalR NET 客户端进行测试 而不是 javascript 客户端 如果我打电话给Stop客户端上

随机推荐

  • SQL Server - 数据库“数据库”不存在。确保名称输入正确

    我正在尝试从实体框架模型生成数据库表 但在执行生成查询时收到此错误 Database Database does not exist Make sure that the name is entered correctly 我能够很好地连接
  • R:从数据中获取符合条件的行?

    我有一个包含大量数据的 CSV 文件 如下所示 gt test csv lt read csv Desktop stats csv gt test csv m lvl a b c a pct b pct c pct d pct 1 5435
  • 播放内存流中的视频

    到目前为止找不到任何令人满意的答案 我正在开发一个 C WinForms NET3 5 应用程序 该应用程序需要从数据库 BLOB 加载视频文件并在应用程序窗口内播放 数据库是本地文件 不涉及服务器 我不认为将文件保存到硬盘驱动器是一个好的
  • CodeigniterWhere 子句

    不知怎的 对我来说构建这样的查询有点困难 给我所有链接名称不为空的导航条目 query this gt db gt get where navigation array linkname NULL 给我错误 where 子句 中的未知列 0
  • 在ArrayBlockingQueue中,为什么将final成员字段复制到局部final变量中?

    In ArrayBlockingQueue 所有需要锁的方法将其复制到本地final调用前的变量lock public boolean offer E e if e null throw new NullPointerException f
  • 在 shell 脚本中使用expect

    我需要传递两个参数给expect 第一个是要执行的命令 第二个是密码 这是我的期望 sh usr bin expect spawn lrange argv 0 0 expect password send lindex argv 1 int
  • OpenSSL 内存泄漏?

    我使用以下代码来检查签名 为了简单起见 公钥 消息和签名在中初始化main include
  • 在启动屏幕期间加载 MainActivity

    我目前有一个splashScreenActivity这需要用户按button去MainActivity 是否可以加载全部内容MainActivity WITHOUT MainActivity的 UI 出现在顶部splashScreenAct
  • 防止“点击”事件多次触发+淡入淡出问题

    早安各位 对我正在制作的简单 jQuery 画廊有疑问 它允许用户通过一些按钮循环浏览图像集合 同时在计时器上轮换这些图像 我的问题是 用户可以多次单击该按钮 这会将动画的淡入淡出排队并一遍又一遍地重复 例如用户点击按钮 5 次 gt 同一
  • 在 mac 上使用 gdb 在 eclipse 中调试 - 无法执行 MI 命令:-exec-run

    我有 Eclipse Kepler 和简单的 HelloWorld C 程序 我想在其中学习如何调试 C 程序 单击调试按钮时 我收到以下错误消息 最终启动顺序错误 执行MI命令失败 exec 运行 来自调试器后端的错误消息 无法找到进程
  • 需要 C# 构造函数语法解释

    有人可以向我解释以下构造函数语法吗 我以前没有遇到过它 并在同事代码中注意到它 public Service this Service DoStuff DoMoreStuff 它链接到同一个类中的另一个构造函数 基本上任何构造函数都可以ei
  • WP7 中的 HttpWebRequest 超时不适用于计时器

    由于 WP7 HttpWebRequest 不支持超时 因此我使用计时器来实现该功能 下面是一个例子 我从 UI 表单调 用 GetConnection 但在计时器时间结束之前 ReadCallback 永远不会执行 一旦计时器停止 就会触
  • PHP中的动态静态方法调用?

    请有 PHP 经验的人帮忙解决以下问题 在我的代码中的某个地方 我调用了非实例化类中的公共静态方法 result myClassName myFunctionName 但是 我希望有许多这样的类 并根据用户的语言动态确定正确的类名 换句话说
  • UISearchDisplayController 搜索多个数组

    目前 我正在使用表示名称 ID 等的多个数组的内容填充我的 tableviewcells 当我开始使用搜索显示控制器时 我的问题就出现了 我有一个数组 其中包含名称列表 ID 列表 条形码列表和别名列表 当用户在搜索栏中输入内容时 我需要能
  • Qt:像 Eclipse 一样拖放小部件以实现任意布局(拆分)

    我知道停靠小部件 拆分器等 我仍然想知道是否可以像 Eclipse 中那样创建灵活的拆分系统 当任何小部件根据拖动过程中光标的位置保持垂直或水平拆分时 例如 第一个小部件A占据了整个QMainWindow 第二个B首先在选项卡中打开 所以它
  • 这些数组有什么区别?

    var foo var bar new Array var another 另外 是否可以添加到foo像这样 foo obj new Date var foo foo是一个对象字面量 var bar new Array bar是一个通过初始
  • Yii2 中按字段排序

    我遇到了这个问题 但没有找到 yii Instrument 的任何解决方案 有人知道如何解决这个问题吗 最终 我使用了这个糟糕的代码 params foreach recipeIds as i gt recipeId params id i
  • 打印出 linq 查询的结果

    我正在使用 asp net core 实体框架 我使用 linq 组合三个表 User Products 和 User Had Products 我的查询似乎工作正常 我遇到的问题是打印出查询结果 我可以打印出整个对象 但无法使用点表示法打
  • Direct3D11:翻转 ID3D11Texture2D

    我执行 Direct3D 后台缓冲区的捕获 当我下载像素时 图像帧沿其垂直轴翻转 复制资源或创建目标时是否可以 告诉 D3D 翻转帧ID3D11Texture2D 我是这样做的 我将帧缓冲区复制到其中的纹理是这样创建的 D3D11 TEXT
  • JSON序列化时如何本地化?

    我已经奋斗了几个小时了 但没有好的结果 我正在尝试使用 NET JSON 序列化器将 JSON 从 UI 来回转换为对象 小数会出现问题 因为我的文化标准使用 作为小数分隔符而不是 我尝试过实现自定义转换器 请参阅this问题 没有好的结果