我将一个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...
答案 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 - 如果您要将其转换为整数类型,您将失去前导零并完全更改其含义数据