问题标签 [jsonconverter]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
768 浏览

json.net - 如何从 json.net 中的 JProperty 获取 json 属性的值?

我正在创建一个 JsonConverter 和一个 ContractResolver,我可以使用它们来管理属性和类型序列化,而无需使用 NewtonSoft 属性。

ps,我很惊讶这些功能还没有在某处创建

我创建了一个合同解析器,我认为它适用于序列化步骤。但是我坚持得到一个可以用于反序列化的转换器。我似乎无法从 jProperty 或 JToken 获取值

序列化期间

clrProp: Nickname => jsonProp: nick_name(这在 ContractResolver 中工作)

在反序列化期间

jsonProp: nick_name => clrProp: 昵称(上面的类)

ps - 我们可以将转换器用于两个方向吗?

0 投票
2 回答
167 浏览

angular - Angular patchValue 不适用于 JsonConverter

我有一个带有选择控件的角度形式,它从服务器上的枚举接收它的值。

我在这里创建了一个示例,其中响应硬编码在类型变量中:stackblitz

我现在正在尝试使用 form patchValue 方法填充表单(请参阅 setValues 按钮和方法)。

在现实生活中,此响应来自服务器。

来自服务器的模型如下:

到目前为止,这有效。

如果我更改服务器上的模型以包含 Json StringEnumConverter 属性:

patchValue 方法现在是这样的(参见 setValues2 按钮和方法):

但是我的值不再加载到选择控件中。

我怎样才能解决这个问题?

我开始创建一个指令,但我不知道如何拦截绑定以将值更改为等效的枚举键。

请帮忙

0 投票
1 回答
644 浏览

c# - 写清单使用 System.Text.Json 到没有缩进的 Json 数组

注意:我使用的System.Text.Json不是JSON.NET已经回答了类似的问题。我需要相同的答案,但对于System.Text.Json. 我想将我的课程写成 Json 并确保它是人类可读的。为此,我在选项中将缩进设置为 true。但是,该类包含一个List<double>我不想缩进的属性,因为它使文件很长。

所以我有这个:

我希望它像这样序列化:

不是这个(或类似的东西):

我写了一个JsonConverter来实现这一点:

但是,这会将数组写入我并不真正想要的字符串。最好的方法是什么?

即你得到“[1,2,3]”而不是[1,2,3]

其次,writer传递给Write函数的对象具有Options属性,但不能更改。因此,如果我使用 writer 对象手动写出数组,它会缩进。

0 投票
0 回答
286 浏览

c# - 具有嵌套接口的自定义 JsonConverter

我有一个自定义的 JsonConverter,我需要在我的控制器( [FromBody] )中进行序列化。问题是,当我在此属性上嵌套接口时,会重新创建序列化程序,因此会丢失转换器设置。

到目前为止,我的解决方案是将序列化程序作为一个字段添加到我的转换器中,并在其中使用正确的 serializationSetting 创建它:

它有效,但如果可以的话,我想要一个更好的解决方案。就我的搜索而言,唯一的其他选择是遍历所有对象属性并拥有一个创建对象实例的开关。这个解决方案不是我想要的。有没有办法设置或更改序列化程序?

编辑:

这是一个也适用于第一个实现的对象示例:

这是第一个实现不起作用的示例。这就是我所说的嵌套接口:

第二个示例发生的情况是,当序列化程序尝试解析类型“and”时,它将第二次然后第三次调用 ReadJson 方法来反序列化类型“equals”和“in”,它们是同一个对象。所有这三种类型都是IItemComponent。第二种实现是通过使用静态序列化程序而不是 ReadJson 参数中的序列化程序来解决这个问题。

0 投票
3 回答
267 浏览

c# - 如何编写列表在 C# 中以科学计数法转换为 Json?

我正在尝试像这样将 List 序列化为 json 文件

这有效,但我得到了 qoutes 的值

我不想要引号和价值科学记数法

0 投票
1 回答
31 浏览

asp.net - 为什么我的对象没有填满 aspdotnet json 转换器

我有一个简单的 http 服务器。我通过 POST 发送一些 json 对象

首先,我使用 json 转换器来解析 json 并填充不可序列化的对象

列表加载正常,但在下一步中,包含该列表的类 MyClass 的字段为空

在哪里寻找解决这个问题?

0 投票
1 回答
73 浏览

json - 如何在 VBA 中使用 ParseJson 来获取选定的项目作为响应?

我正在尝试使用来自 GitHub 的 JsonConverter.bas 文件从 VBA 中的 JSON 响应中选择两个值。我不确定我是否正确调用了这些字段。当我运行以下代码时,我收到“运行时错误'13':类型不匹配”错误消息。我如何能够从以下选择 max_price 值和 min_price 值:

0 投票
1 回答
1029 浏览

c# - 如何为自定义 JsonConverter 设置 FloatParseHandling.Decimal?

如何为自定义 JsonConverter 设置 FloatParseHandling.Decimal?

我们有一个结构DecimalDbValue,它在内部只包含一个我想要对其所有类型进行反序列化的十进制字段。

它使用幻数 (decimal.MinValue) 来指示“空”值。它是在具有可为空值类型的 .net 2.0 之前创建的!

这是我们 struct:: 的简化版本

我创建了一个 JsonConverter:

[JsonConverter(typeof(DecimalDbValueJsonConverter))]并在 DecimalDbValue 结构上设置属性

我添加了一个测试:

但它抛出: System.OverflowException : Value was either too large or too small for a Decimal.

如何设置FloatParseHandling.DecimalJsonConverter?如何使它也适用MaxValue?还有其他方法吗?

实际上我想让它序列化/反序列化就像一个decimal?(可为空的十进制)

谢谢

0 投票
2 回答
9270 浏览

asp.net-core - 在 ASP.NET Core 3.1 中设置值比较器

我在我的 DBContext 中使用了“HasConversion”来定义一个 JSonArray(语言/值)并将其保存为一个文本字段,它的作用就像一个魅力,我在我的解决方案中添加了一个新项目,没有任何改变,但后来我得到了添加有关“设置值比较器”的迁移的新错误。

我的模型就像:

DBContext就像:

它工作得很好,但是在添加一个新项目后,我在添加迁移时遇到了黄色错误,并且模型没有添加到新数据库中。

Microsoft.EntityFrameworkCore.Model.Validation[10620] 实体类型“品牌”上的属性“名称”是具有值转换器但没有值比较器的集合或枚举类型。设置一个值比较器以确保正确比较集合/枚举元素。

0 投票
1 回答
146 浏览

c# - 从 JsonConverter.ReadJson 访问已经反序列化的属性

我试图在反序列化旧 json 时解决向后兼容性问题。以前有double属性,现在改为自定义类型。

我的想法是使用自定义 json 转换器读取double并简单地转换它。

之前是:

序列化为

新的一个:

序列化为

转换器:

但要构造MyType我需要字符串参数,它是另一个属性的值Name

如何Name从转换器获取价值Value?如何访问任何已反序列化的内容?有没有什么树?令牌树?

另一件事:在WriteJson我想做“没什么”特别的方法中,我的实现是否正确?或者有没有一种简单的方法可以防止转换器在序列化时做任何“特殊”的事情?