如何根据 JSON 确定属性类型



我有一个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

值始终是字符串。 您可以尝试将 JSON 字符串解析为变量以确定类型

相关内容

  • 没有找到相关文章

最新更新