如何从JSON确定属性类型

时间:2012-12-13 22:39:40

标签: vb.net rest types json.net

我将一个JSON对象传递给我的REST API。我使用通用的API控制器,特定的API继承。使用JSON.NET,我试图确定JSON数据的基本类型(String,Integer,Boolean等)。这是一个例子:

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...

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

为了保存类型信息,您需要序列化类型信息,并在反序列化方面对其执行某些操作。

示例:

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

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