问题标签 [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 回答
74 浏览

c# - 使用 Newtonsoft JSON 反序列化不可变多态类型的层次结构时出现 StackOverflowException

我有一个多态不可变类的层次结构,我想使用 Newtonsoft JSON 从 JSON 序列化和反序列化。

这是一组简化的示例类:

我需要生成的 JSON 遵循特定格式,该格式不通过完整的类名或使用 $type 参数来识别类型,就像其他值一样TypeNameHandling

因此,我创建了以下ItemJsonConverter类来从 JSON 中读取我的自定义“ItemType”属性,以确定要反序列化到的正确类型。

这是创建的 JSON

然而,当我运行以下代码来测试这个时,aStackOverFlowException被抛出ItemJsonConverter.ReadJson()

我已经阅读了关于同一问题的其他类似问题,解决方案是将调用替换JObject.ToObject<T>()为新对象的显式构造,然后使用JsonConvert.PopulateObject<t>()JSON 中的值更新对象。

但是,我希望这些对象是完全不可变的,并且在构造后无法更改它们。(除非这是让它工作的唯一方法。)

我可以通过手动从JObjectin 中读取值并直接ReadJson()调用FooBar构造函数来使其工作。但是,对于更复杂的对象,我真的很想利用 Newtonsoft 通过属性和反射自动序列化/反序列化的能力,而不必在每次类更改时更新我的​​序列化代码。

这是作为 Gist 的完整示例代码: https ://gist.github.com/aireq/51e4527886ddb076ee8c981264b439a7

0 投票
1 回答
148 浏览

java - JSON 到多行 Java 字符串转换器

这个很棒的codebeautify几乎有我需要的东西,但不会转义特殊字符并使用单引号。对 JavaScript 来说似乎没问题。

有什么工具可以将 JSON 有效负载 a 转换为多行转义的 Java 字符串?

我想制作这样的东西:

但是codebeautify只会产生这个。

0 投票
1 回答
921 浏览

c# - 如何将json字典序列化/反序列化为数组

需要将 C# 字典序列化和反序列化为 JSON 数组。我还想使用数组索引表示法从 powershell 读取 JSON。

默认情况下,JSON 格式为:

使用 .Net Core 中的默认 json 阅读器效果很好,但它不允许我在 PowerShell 中使用数组索引表示法。

相反,我正在寻找的是:

我正在使用序列化 Dictionary<string,string> 中的 WriteJson 部分到“name”数组:“value”

这很好用;但是,当然,由于该ReadJson()方法未实现,因此它不会读取。顺便说一句,为了获得上述所需的 json 格式,我将链接中的 CustomDictionaryConverter 修改为:

实现背后的类是:

我将对象序列化如下: var json = JsonConvert.SerializeObject(ds, Formatting.Indented, new CustomDictionaryConverter());

如前所述,序列化有效,但我需要帮助编写ReadJson()方法才能反序列化。

0 投票
1 回答
1564 浏览

c# - 如何使用 JSON.NET 进行序列化并忽略可为空的结构值

我正在尝试使用 JSON.NET 和自定义序列化可空结构JsonConverter。我希望null在 JSON 输出中忽略/省略一个值,例如我希望下面的 JSON 输出{}不是{"Number":null}. 如何做到这一点?这是一个带有单元测试的最小重现,其中包含我想要实现的目标。

0 投票
3 回答
1101 浏览

android - com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: 预期 BEGIN_OBJECT 但在第 1 行第 3 列路径 $[0] Gson 错误

每当我请求 @Post 方法时,就会发生错误。@Get 方法可以正常工作。好吧,PostMan 的反应也很好。有人可以帮助我为什么会这样。使用的标头是 header("Content-Type", "application/json") header("Accept", "application/json")

我的发帖请求方法-

我收到 PostMan 的回应-

Pojo类-

错误-com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 3 path $[0]

编辑:截图: 邮递员截图和邮递员的截图2

0 投票
0 回答
31 浏览

c# - 覆盖 [JsonConverter(typeof(UsualConverter)] 类属性

小提琴测试:https ://dotnetfiddle.net/RyxMjm

using NewtonSoft.Json;

让我们SomeClass成为一个需要自定义 json 转换器的库类。它提供的库提供了自定义的 json 转换器,UsualConverter并通过在类定义中使用JsonConverter属性指定转换器将转换器链接到类。

但是我现在需要为它实现和使用不同的 json 转换器。所以我创建了自己的:

当我根本无法让 JsonConvert 使用我的新转换器时,就会出现问题......它总是使用在类定义中使用属性指定的原始标头。

以下代码引发异常。如何使用新的自定义转换器完成序列化/反序列化?

我可以编辑包含“违规”类的库,但是,我不想破坏已经使用该库的其他应用程序。如果涉及修改库代码的答案不会破坏已经使用该库的其他应用程序,则将被接受。

小提琴测试:https ://dotnetfiddle.net/RyxMjm

更新

使用我从重复问题的答案中学到的知识,我创建了以下扩展方法,以允许应用程序代码快速将备用 JsonConverter 应用于其序列化程序。它只能在应用程序代码已经将另一个应用程序代码应用于ContractResolver序列化程序设置对象的极少数情况下破坏应用程序代码。

0 投票
0 回答
259 浏览

c# - 根据字段名称应用自定义转换器

我有一个自定义 JSON 转换器,用于具有多个不同类型字段的类,我有一个特定规则将负双字段映射到 null,但我希望根据字段名称应用该规则,即:

我有课

使用以下值转换类时

结果将是:

但我希望它是:

也就是说,自定义转换器将根据字段名称将覆盖转换应用于 x 而不是 z,但 CanConvert 和 WriteJson 都不会收到有关字段名称的信息

关于这个问题的任何想法都将不胜感激

下面我粘贴了我当前使用的自定义十进制转换器的代码(名称可以不同)

0 投票
1 回答
390 浏览

c# - 将具有十六进制值的 JSON 反序列化为 sbyte 属性时,JsonConvert.DeserializeObject 引发异常

我有一个机器生成的类MyData,它有sbyte成员。实际的类很长而且可读性不强,但这里是它的一个片段:

对应的简化 JSON 如下所示:

我正在尝试像这样反序列化:

某些值超出sbyte范围,例如0xAA。结果,抛出异常。例如,当我将值更改0x1为 时,它可以工作。

我无法触摸MyData. 它是机器生成的。是否有转换设置、覆盖或其他方式将这些值正确反序列化为sbyte

0 投票
1 回答
501 浏览

c# - 通用和复杂类型的 JsonConverter 失败“在 JSON 中找到其他文本......”

我正在尝试使用 json 转换器但没有成功。

我有一个可以(反)序列化 json 的传感器类:

然后我有一长串传感器,我将专注于第一个,为了简单起见忽略其余的:

而且,我有转换器可以将值从一种公制转换为另一种公制。例如BarToPascal转换器:

问题出在 ReadJson 方法中。那里我做错了什么,导致以下异常:

Newtonsoft.Json.JsonSerializationException : 完成反序列化对象后在 JSON 字符串中找到的附加文本。路径 '',第 1 行,位置 45。

我编写了一个单元测试来隔离问题,并为 ReadJson 方法尝试不同的实现,但我发现即使我“只是返回”一个新的JsonSensor<double>()反序列化仍然失败。

当然,当我删除 JsonConverter 时,我可以对字符串进行反序列化。所以这告诉我:

  • 提供的 json 字符串是可以的。
  • json反序列化的类结构没问题。

我在 ReadJson 中做错了什么?我怎样才能成功阅读JsonSensor<double>从阅读器中读取并转换它的值?

为了完整性,单元测试:

0 投票
2 回答
223 浏览

c# - 如何从 JsonString 转换为 NameValueCollection

我有一个如下的 JSON 字符串:

"\"{\\\"PersonNumber\\\":\\\"4537\\\",\\\"PersonName\\\":\\\"Jenny\\\"}\""

我想将此 JSON 转换为 NameValueCollection,并尝试了以下代码。但我收到一个错误:

错误:

无法将“System.String”类型的对象转换为“System.Collections.Specialized.NameValueCollection”类型

我在哪里犯错?