0

REST API に渡された JSON オブジェクトがあります。特定の 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...
4

2 に答える 2

0

これは主に 2 つの要因によるものです。まず、構造 (型) ではなく、データをシリアル化しています。次に、Javascript (したがって JSON) には型がありません。[例えば。アラート (1.0 == '1.0'); true になります)。

型情報を保存するには、型情報をシリアル化し、逆シリアル化側で何かを行う必要があります。

例:

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

タイプを推測しようとすることは避けます。プロパティ値を (推測によって) Int32 に変換できるからとidいって、次のオブジェクトの id 値が Int32 になるとは限りません。また、文字列形式の数値データを含む値にも注意する必要があります。たとえば、国際電話番号: 011334998723 - これを整数型に変換すると、先頭のゼロが失われ、値の意味が完全に変わってしまいます。データ。

于 2012-12-13T22:51:10.033 に答える
-1

json 値は常に文字列です。json 文字列を変数に解析して、型を判別することができます

于 2012-12-13T22:48:25.383 に答える