问题标签 [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.
c# - 使用 Newtonsoft JSON 反序列化不可变多态类型的层次结构时出现 StackOverflowException
我有一个多态不可变类的层次结构,我想使用 Newtonsoft JSON 从 JSON 序列化和反序列化。
这是一组简化的示例类:
我需要生成的 JSON 遵循特定格式,该格式不通过完整的类名或使用 $type 参数来识别类型,就像其他值一样TypeNameHandling
因此,我创建了以下ItemJsonConverter
类来从 JSON 中读取我的自定义“ItemType”属性,以确定要反序列化到的正确类型。
这是创建的 JSON
然而,当我运行以下代码来测试这个时,aStackOverFlowException
被抛出ItemJsonConverter.ReadJson()
我已经阅读了关于同一问题的其他类似问题,解决方案是将调用替换JObject.ToObject<T>()
为新对象的显式构造,然后使用JsonConvert.PopulateObject<t>()
JSON 中的值更新对象。
但是,我希望这些对象是完全不可变的,并且在构造后无法更改它们。(除非这是让它工作的唯一方法。)
我可以通过手动从JObject
in 中读取值并直接ReadJson()
调用Foo
和Bar
构造函数来使其工作。但是,对于更复杂的对象,我真的很想利用 Newtonsoft 通过属性和反射自动序列化/反序列化的能力,而不必在每次类更改时更新我的序列化代码。
这是作为 Gist 的完整示例代码: https ://gist.github.com/aireq/51e4527886ddb076ee8c981264b439a7
java - JSON 到多行 Java 字符串转换器
这个很棒的codebeautify几乎有我需要的东西,但不会转义特殊字符并使用单引号。对 JavaScript 来说似乎没问题。
有什么工具可以将 JSON 有效负载 a 转换为多行转义的 Java 字符串?
我想制作这样的东西:
但是codebeautify只会产生这个。
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()
方法才能反序列化。
c# - 如何使用 JSON.NET 进行序列化并忽略可为空的结构值
我正在尝试使用 JSON.NET 和自定义序列化可空结构JsonConverter
。我希望null
在 JSON 输出中忽略/省略一个值,例如我希望下面的 JSON 输出{}
不是{"Number":null}
. 如何做到这一点?这是一个带有单元测试的最小重现,其中包含我想要实现的目标。
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
c# - 覆盖 [JsonConverter(typeof(UsualConverter)] 类属性
小提琴测试:https ://dotnetfiddle.net/RyxMjm
using NewtonSoft.Json;
让我们SomeClass
成为一个需要自定义 json 转换器的库类。它提供的库提供了自定义的 json 转换器,UsualConverter
并通过在类定义中使用JsonConverter
属性指定转换器将转换器链接到类。
但是我现在需要为它实现和使用不同的 json 转换器。所以我创建了自己的:
当我根本无法让 JsonConvert 使用我的新转换器时,就会出现问题......它总是使用在类定义中使用属性指定的原始标头。
以下代码引发异常。如何使用新的自定义转换器完成序列化/反序列化?
我可以编辑包含“违规”类的库,但是,我不想破坏已经使用该库的其他应用程序。如果涉及修改库代码的答案不会破坏已经使用该库的其他应用程序,则将被接受。
小提琴测试:https ://dotnetfiddle.net/RyxMjm
更新
使用我从重复问题的答案中学到的知识,我创建了以下扩展方法,以允许应用程序代码快速将备用 JsonConverter 应用于其序列化程序。它只能在应用程序代码已经将另一个应用程序代码应用于ContractResolver
序列化程序设置对象的极少数情况下破坏应用程序代码。
c# - 根据字段名称应用自定义转换器
我有一个自定义 JSON 转换器,用于具有多个不同类型字段的类,我有一个特定规则将负双字段映射到 null,但我希望根据字段名称应用该规则,即:
我有课
使用以下值转换类时
结果将是:
但我希望它是:
也就是说,自定义转换器将根据字段名称将覆盖转换应用于 x 而不是 z,但 CanConvert 和 WriteJson 都不会收到有关字段名称的信息
关于这个问题的任何想法都将不胜感激
下面我粘贴了我当前使用的自定义十进制转换器的代码(名称可以不同)
c# - 将具有十六进制值的 JSON 反序列化为 sbyte 属性时,JsonConvert.DeserializeObject 引发异常
我有一个机器生成的类MyData
,它有sbyte
成员。实际的类很长而且可读性不强,但这里是它的一个片段:
对应的简化 JSON 如下所示:
我正在尝试像这样反序列化:
某些值超出sbyte
范围,例如0xAA
。结果,抛出异常。例如,当我将值更改0x1
为 时,它可以工作。
我无法触摸MyData
. 它是机器生成的。是否有转换设置、覆盖或其他方式将这些值正确反序列化为sbyte
?
c# - 通用和复杂类型的 JsonConverter 失败“在 JSON 中找到其他文本......”
我正在尝试使用 json 转换器但没有成功。
我有一个可以(反)序列化 json 的传感器类:
然后我有一长串传感器,我将专注于第一个,为了简单起见忽略其余的:
而且,我有转换器可以将值从一种公制转换为另一种公制。例如BarToPascal
转换器:
问题出在 ReadJson 方法中。那里我做错了什么,导致以下异常:
Newtonsoft.Json.JsonSerializationException : 完成反序列化对象后在 JSON 字符串中找到的附加文本。路径 '',第 1 行,位置 45。
我编写了一个单元测试来隔离问题,并为 ReadJson 方法尝试不同的实现,但我发现即使我“只是返回”一个新的JsonSensor<double>()
反序列化仍然失败。
当然,当我删除 JsonConverter 时,我可以对字符串进行反序列化。所以这告诉我:
- 提供的 json 字符串是可以的。
- json反序列化的类结构没问题。
我在 ReadJson 中做错了什么?我怎样才能成功阅读JsonSensor<double>
从阅读器中读取并转换它的值?
为了完整性,单元测试:
c# - 如何从 JsonString 转换为 NameValueCollection
我有一个如下的 JSON 字符串:
"\"{\\\"PersonNumber\\\":\\\"4537\\\",\\\"PersonName\\\":\\\"Jenny\\\"}\""
我想将此 JSON 转换为 NameValueCollection,并尝试了以下代码。但我收到一个错误:
错误:
无法将“System.String”类型的对象转换为“System.Collections.Specialized.NameValueCollection”类型
我在哪里犯错?