gpt4 book ai didi

json - 使用 JSON.NET 序列化记录类型中的 F# 选项字段时出现意外属性

转载 作者:行者123 更新时间:2023-12-05 03:12:57 25 4
gpt4 key购买 nike

为了(反)序列化,我在 F# 中有一组相对简单的记录与 JSON 负载匹配。当我尝试反序列化负载时,出现错误

Unexpected property 'tags' found when reading union. Path 'products[0].tags'

我的记录和有效负载在结构上匹配,但在字段名大小写上不匹配;但是我在 JSON.NET 设置中添加了 CamelCasePropertyNamesContractResolver 来解决这个问题。

当我从示例有效负载和记录类型中删除标签属性时,错误会转移到提及变体。我还尝试将 CLIMutableDataContract 属性添加到记录中。向相关字段添加 JsonProperty 属性也无济于事。

查看 JSON.NET 源代码,当找不到具有该名称的联合案例时,似乎会出现此错误。但是,在这种情况下,我处理的是记录中的字符串,所以这对我来说没有意义。

以前有人遇到过这个吗?这是库的限制吗? 还是我用错了?

编辑

进一步的调查表明,这似乎是序列化记录中的 string option 类型字段的问题(现在添加到下面的代码中),它在有效负载中有一个值。


F#

type Product = {
Id: int;
Title: int;
Tags: string;
Variants: Variant list;
Vendor: string option;
}

type ProductList = {
Products: Product list
}

JSON

{
"products": [
{
"id": 123,
"title": "A title",
"tags": "some, tags"
"variants": [],
"vendor": "The Vendor"
...
},
...
]
}

最佳答案

你的 Vendor字段序列化输入不正确。 option type 是一个可区分的联合,Json.NET 期望所有 DU 序列化为 {"case":"blah","fields":["moreblah"]} .所以在你的情况下你应该使用 "vendor":{"case":"Some","fields":["The Vendor"]} .

我想有人在某个地方写了一个 option -如果您不能更改序列化输入,则可以使用特定转换器。

关于json - 使用 JSON.NET 序列化记录类型中的 F# 选项字段时出现意外属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31966160/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com