问题标签 [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 投票
1 回答
178 浏览

.net - 让通过属性指定的转换器等效于 json.net 中的全局转换器

什么时候using Newtonsoft.Json,我可以通过将转换器添加到顶层SerializerSettings或将其提供给转换调用来完成我需要的工作 - 一切都运行良好。

我希望提取我的一些全局转换器,以便在实际需要转换的相关位置以声明方式应用。

我知道以下技术:-

  • 类型级别[JsonConverter(typeof(Converters.StringEnumConverter))]直接在类型上X
  • 成员级别[JsonConverter(typeof(Converters.StringEnumConverter))],如果成员属于类型X
  • 项目级别[JsonProperty(ItemConverterType=typeof(Converters.StringEnumConverter)],如果成员实际上是一个数组等X

我遇到的问题是我使用的一些全局转换器在嵌套类型上运行,例如,如果我有 type 的成员Tuple<X[],Nullable<X>>,我无法表达“如果在处理此字段或任何子字段时遇到 X它,做转换”语义,而不是得到一个Newtonsoft.Json.JsonSerializationException.

这种“对于这棵树,也请使用这个转换器”机制是否存在?我想避免必须为我想要转换的任何东西定义一个顶级类型,然后用 标记该类型JsonConverter来解决这个问题?

0 投票
4 回答
366 浏览

c# - 将json转换为c#对象

我有一个 api,它返回一个带有数据转换信息的 json 和一个带有数据的数组

我有一堂课是指物品的退货

主文件

我的字符串 stringJson 得到以下值

但是当我尝试转换时

显示错误

错误:无法将当前 json 对象(例如 {"name":"value"})反序列化为类型 ...

如何使用 json 数据创建对象数组?只取日期和项目

我是否可以单独正式检索值,例如我创建一个变量 bool status = jsonConvert.get ("status"); 类似的东西?

0 投票
2 回答
567 浏览

c# - 将 JSON 转换为 XML 并再次转换为 JSON

我有以下格式的 JSON 文件,它具有不同类型的值(字符串、数字、布尔值和 Null)。我想将此 JSON 转换为 xml 格式以进行一些数据处理,然后我想转换回相同的 JSON 格式。需要确保它不应该丢失任何数据类型。这些数字在双引号中,那么它应该是相同的,如果某个数字没有双引号,那么它应该没有双引号。

目前我尝试将 JsonConvert 对象转换为 serializeObject 和 DeserializeObject,但它会丢失数值并将所有内容转换为双引号。

请提出适当的方法来处理这个问题。

0 投票
0 回答
249 浏览

c# - 更新 JObject 中的值,在 JsonConverter ReadJson 中

我在反序列化 json 时尝试更新/更改类中的值。

我需要在 JsonConverter 中执行此操作,但我收到此错误: 状态属性中的 Token PropertyName 会导致 JSON 对象无效。路径“[0]”。

这是我的课

这是 JsonConverter MyConverter

0 投票
1 回答
40 浏览

c# - Json.NET C#:根据集合字段是否已用某个属性装饰来序列化集合

我正在 Unity 中使用 Json.NET 构建序列化系统。基本思想是需要序列化引用的类用 [Ref] 装饰,如下所示:

此类的任何其他实例都被自动视为引用,除非该字段已用 [Def] 修饰。

然后我可以使用一些自定义转换器(一个将类实例序列化为其定义,另一个作为数字 ID),甚至可以使用手动分配这些转换器的自定义合同解析器。当我只处理奇异字段时,这个系统效果很好。我可以说:

...而前者会变成一堆Json字段,而后者会变成简单的数值引用,避免引用重复。这很好用,因为我可以通过使用 CreateProperty() 覆盖来读取自定义合同解析器中的字段信息属性。或者我可以使用

但这不适用于集合。我可以将自定义行为应用于集合本身,但不能应用于其元素。我可以为该集合制作一个自定义转换器以对其子项进行操作,但我不确定如何。

这是一个有点复杂的场景,所以我暂时不会用大量代码淹没每个人,但如果需要更多细节,请说出来。

最后:我不使用 Json.NET 的本机引用处理系统的原因是因为我们有特殊需要将一些对象序列化为数字,而将其他对象序列化为清晰的字符串名称(例如“PinotGris_WINE”)。

谢谢。

0 投票
1 回答
121 浏览

c# - 如何使用 C# 反序列化复杂的 JSON 对象?

如何使用 c# 反序列化复杂的 JSON 对象,请问我需要在下面对 JSON 字符串进行反序列化吗?我试图将事务属性作为字典而不工作,所以请知道吗?

将事务从数组替换为字典时出现异常:无法序列化 System.Collections.Generic.Dictionary`2[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089] 类型的成员 wsA2AEBS.WCTransactionsResponse1.transactions ,[wsA2AEBS.WCTransInfoRes, wsA2AEBS, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]],因为它实现了 IDictionary。说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

异常详细信息:System.NotSupportedException:无法序列化成员 wsA2AEBS.WCTransactionsResponse1.transactions 类型 System.Collections.Generic.Dictionary`2[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[ wsA2AEBS.WCTransInfoRes, wsA2AEBS, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]],因为它实现了 IDictionary。

---------- JSON文件

---------- 课程

---------- 转换Json字符串

0 投票
1 回答
313 浏览

c# - C# JsonConverter 可以根据类转换属性

我想编写一个 JsonConverter 它可以转换确定的属性类型,但仅取决于它们定义的类。

我正在通过 Web API 全局注册 JsonConverter:

例如,转换器可以转换 MyType 类型的对象。

但现在我想控制是否应该使用转换器。

我是这样想的:

因此,我希望 SomeConverter 仅在未使用 CustomAttribute IgnoreSomeConverter 修饰的类中定义属性时才对属性 MyType 进行序列化和反序列化。在示例中,我想将转换器用于 ClassB,但不用于 ClassA。有什么想法吗?

0 投票
1 回答
1362 浏览

json - JsonConverter, 键不存在时需要的错误对象

我正在使用将 VBA 与 API 连接,有时从 API 返回的 JSON 具有动态密钥。像这样

有时像这样

我试过了

它总是给出所需的错误对象。我看起来总是在寻找(“颜色”)

问题是如何从 json 中获取“null”或“yellow”的数据。

0 投票
1 回答
4486 浏览

c# - 状态 Property 中的 Token PropertyName 会导致 JSON 对象无效。使用自定义 JsonConverter 时

我正在尝试使用 Json.NET 和自定义序列化程序对 .NET 数据集进行序列化/反序列化。我知道你们中的许多人会告诉我不要(我在其他帖子上看到过)我有充分的理由并希望继续沿着这条路走下去。

我的序列化基于 .NET DataSet 可以将其架构和数据导出到 XML,然后重新导入相同的事实;在此基础上,我正在尝试创建一个转换器,该转换器允许我捕获该 XML,将其转换为 JSON,然后将其转换回来并重新加载它。我的实现如下...

按如下方式使用(纯粹序列化 DataSet 对象)它可以工作(我的新 DataSet 与原始数据集具有相同的架构和数据)...

但是,如果我然后尝试将相同的转换器与包含 a 的对象一起使用DataSet(与DataSet上述相同)...

它失败了

状态 Property 中的 Token PropertyName 会导致 JSON 对象无效。小路 ''。

我还尝试使用属性装饰DataSeton并从 Serialize 方法调用中删除转换器,但得到相同的结果......TestClassJsonConverter

我错过了什么?

0 投票
3 回答
6739 浏览

c# - 在类属性上使用 JsonConverter 时选择 NamingStrategy

我有 ac# 类,我正在尝试使用Newtonsoft.Json. 该属性是一个枚举类型,我希望将该值序列化为“枚举名称的小写版本”。有一个JsonConverterAttribute可用于在属性上指定 this 和一个预先编写的StringEnumConverter,但我需要CamelCaseNamingStrategy在该转换器上指定,但我无法计算出语法。

我试图将它分配给属性本身:

我也尝试将它类似地添加到枚举类型本身:

但是语法是错误的。我在Newtonsoft 文档中找不到任何此类示例。

所需的序列化将是:"ChartType":"pie""ChartType":"bar"

有任何想法吗?谢谢。