我有一个JSON对象传递到我的REST API中。 我使用特定 API 继承的通用 API 控制器。 使用 JSON.NET,我尝试确定 JSON 数据的基本类型(字符串、整数、布尔值等)。 下面是一个示例:
Public Overridable Function PostValue(<FromBody()> record As JObject)
For Each thing As KeyValuePair(Of String, JToken) In record
MsgBox(thing.Key & ": " & thing.Value.ToString & " (" & thing.Value.Type & ")")
Next
'do other stuff and return some other stuff...
End Function
不幸的是,这只是返回string
作为所有 JSON 值的类型。 有没有从字符串值解析 JSON 数据成员的基本类型的好方法?
更新
我知道 JSON 作为Javascript,总是非类型化的 - 我知道当 JSON 数据被传递时,它总是作为 JSON 字符串(因此,键入string
)。 我想我想知道 JSON.NET(或任何其他库)是否有办法动态确定此 JSON 字符串中存储的数据的基本类型。 例如(注意:我知道parseType
不存在):
Json.ParseType("1") ' --> String
Json.ParseType(1) ' --> Integer
Json.ParseType("True") ' --> String
Json.ParseType(True) ' --> Boolean
Json.ParseType([1,2,3]) ' --> Array
'etc...
这在很大程度上是由于两个因素。首先,您正在序列化数据,而不是结构(类型)。其次,Javascript(以及JSON)是无类型的。 [例如。 警报(1.0 == '1.0');将导致 true)。
为了保留类型信息,您需要序列化类型信息,并在反序列化端对其进行一些操作。
例:
{
__type__id: 'Int32',
__type__name: 'String',
id: 5,
name: 'Joe'
}
我会避免尝试猜测类型。 仅仅因为可以将 id
属性值转换为 Int32(通过猜测)并不意味着下一个对象的 id 值将是 Int32。 您还必须小心包含字符串格式的数字数据的值。例如,国际电话号码:011334998723 - 如果要将其转换为整数类型,则会丢失前导零并完全更改数据的含义。
值始终是字符串。 您可以尝试将 JSON 字符串解析为变量以确定类型