我有一个问题与以下最小代码:
[Fact]
public void DeserializeKeyValuePair()
{
string text = "{\"offer\": 12432515239}";
KeyValuePair<string, long> test = JsonSerializer.Deserialize<KeyValuePair<string, long>>(text);
}
在. NET 7中,此代码按预期工作。
. NET 6则会引发无法转换键值对的错误。
System.Text.Json.JsonException :
The JSON value could not be converted to System.Collections.Generic.KeyValuePair`2[System.String,System.Int64].
Path: $.offer | LineNumber: 0 | BytePositionInLine: 9.
不幸的是,由于与另一个重要的库不兼容,我无法将我的项目升级到. NET 7。
也许Newtonsoft.Json可以做到这一点,但我正试图将第三方库保持在绝对最低限度。我也很惊讶,我没有在互联网上找到更多关于这个问题的参考文献。
是否有解决此问题的方法?
更新:
这个字符串似乎用. NET 7反序列化成了null
,这仍然是意料之外的。但是,它并没有崩溃。主要目的是从服务器api响应反序列化字典。
解决办法是,根据大师斯特龙安装nuget包。看看他的答案。
1条答案
按热度按时间ncgqoxb01#
反序列化到
KeyValuePair<,>
导致异常看起来像是一个bug,但是您can useDictionary<string, long>
:或者创建一个custom converter.另一种方法是手动安装最新版本的
System.Text.Json
nuget。附言
在. NET 7中,此代码按预期工作。
不管是不是,我想说这里的期望值有待讨论(与
Dictionary<,>
处理相比),尽管Newtonsoft.Json
和System.Text.Json
在. NET 7中的工作原理是一样的: