0

我有一个 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 字符串(因此是 typed 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...
4

2 回答 2

0

这在很大程度上是由于两个因素。首先,您要序列化数据,而不是结构(类型)。其次,Javascript(以及 JSON)是无类型的。[例如。警报(1.0 == '1.0');将导致 true)。

为了保留类型信息,您需要序列化类型信息,并在反序列化方面对其进行处理。

例子:

{
  __type__id: 'Int32',
  __type__name: 'String',
  id: 5,
  name: 'Joe'
}

我会避免试图猜测类型。仅仅因为您可以将id属性值转换为 Int32(通过猜测)并不意味着下一个对象的 id 值将是 Int32。您还必须注意包含字符串格式的数字数据的值。例如,国际电话号码:011334998723 - 如果要将其转换为整数类型,则会丢失前导零并完全改变数据。

于 2012-12-13T22:51:10.033 回答
-1

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

于 2012-12-13T22:48:25.383 回答