【发布时间】:2020-08-22 09:14:45
【问题描述】:
我正在尝试将 json 反序列化为 C# 对象。 json基本上是这样的:
{ "hexValue": "0x9a7f" }
我的 POCO 是这样的:
public class HexTest
{
public int hexValue;
}
我在this question 的链接中读到,Newtonsoft 支持反序列化十六进制值。但平心而论,这些发行说明是十年前发布的。我什至在github published here 上阅读了一些源代码,似乎是反序列化以“0x”开头的十六进制格式字符串的代码。然而,当我尝试反序列化一个十六进制值时,我总是得到以下异常:
无法将字符串转换为 int:0x9a7f。
我尝试什么类型并不重要。我尝试过使用 int long decimal Decimal 等...从阅读源代码来看,Decimal 类型应该有效,但没有任何效果。 Newtonsoft 真的支持将定义为字符串的十六进制值转换为某种数字数据类型吗?
当然,我知道我可以使用上面链接到的问题中的信息来实现对它的自定义支持,但如果有内置支持,我真的更愿意使用它。
【问题讨论】:
-
你试过
{ "hexValue": 0x9a7f }吗?或者你真的是想成为字符串? -
大声笑,神圣的$#@!起初我确实尝试过,但那是我尝试在我的 POCO 中使用 int 类型的时候。它因另一个例外而窒息。但是,现在我尝试了不带引号和小数类型的方法,它可以工作!!!!!!谢谢!!不敢相信在发布问题之前我没有考虑过尝试。我希望有更好的记录。在 newtonsoft 文档站点上搜索十六进制会产生 0 个结果。事实上,我之前一定做了其他事情来搞砸它,因为它现在似乎可以正确解析所有数字数据类型。很奇怪。
-
也许,既然您知道什么是有效的,您就可以为自己的问题写一个详尽的答案,这样其他有同样问题的人就可以从中获利,并避免自己在文档地狱的无指导之旅?我的建议只是一个意外......所以你实际上应该更能够告诉为什么这有效。
-
我希望你能回答这个问题,但当然,我很乐意。
-
正如我所说,这只是一剂良药。我无法(真的)解释为什么这有效以及它记录在哪里......所以,没什么值得称赞的。你完成了这项工作。
标签: c# json.net hex json-deserialization