0

いくつかのオブジェクトを逆シリアル化するためにJSon.netライブラリを使用していますが、正常に動作します。

Public Class Person
  Public Property PersonId As Long
  Public Property Name As String
  Public Property SSN As Integer
End Class

Dim json = {'Name':'John', 'SSN':'ABC'}

JsonConvert.DeserializeObject(json, GetType(Person))

ただし、私の場合、json には無効なデータ (上記の SSN など) が含まれている可能性があり、その場合、エラーとして表示されるのは「入力文字列が正しい形式ではありませんでした」だけです。どのフィールドが正確にエラーを引き起こしたかを調べる方法はありますか?

4

1 に答える 1

1

JSON が正しくフォーマットされている場合、値を変換できない場合、Json.Net は詳細なエラーを報告する必要があります。バージョン 5.0.8 (NuGet で利用可能な最新のもの) を使用して、次のコードで試してみました。

Sub Main()
    Dim json As String = "{""Name"":""John"", ""SSN"":""ABC""}"
    JsonConvert.DeserializeObject(json, GetType(Person))
End Sub

Public Class Person
    Public Property PersonId As Long
    Public Property Name As String
    Public Property SSN As Integer
End Class

...そしてJsonReaderException、次のメッセージ テキストを受け取りました。

Could not convert string to integer: ABC. Path 'SSN', line 1, position 27.

代わりに取得している場合はInput string was not in a correct format、JSON 文字列に問題があり、パーサーを混乱させている可能性があります。あなたの質問で、プロパティ名と値を二重引用符ではなく一重引用符で囲んでいることに気付きました。これは技術的には仕様 ( JSON.orgを参照) によると有効な JSON ではなく、問題の原因となっている可能性があります。

于 2013-10-24T03:31:49.787 に答える