私はJSONメッセージを返すWebサービスを消費しようとします。各メソッドは関連するJSONメッセージ(通常は配列)またはJSONエラーメッセージ(配列ではありません)を返します。 UserListとエラーメッセージのDeserialise 2種類のJSONメッセージ
例:
[
{
"id":1,
"login":"john1",
"full_name":"John Smith"
},
{
"id":2,
"login":"anne",
"full_name":"Anne Steward"
}
]
{
"success":false,
" message":"Unknown login"
}
コードが期待したメッセージを知らないので、私はのUserListはBaseResponseから継承二つのクラス(エラーメッセージクラス)を作成しました。私はGetCarListなどの他のすべてのメソッドもエラーメッセージを返すのに適しているので、継承を使用しています。エラーフィールドを複数回宣言する必要はありません。それはスマートでなければなりません - 私はいつもUserListフィールドやエラーメッセージフィールドを同じオブジェクトに取得します。
問題は、UserListResponse JSONメッセージが配列であり、ErrorMessage JSONが配列ではないという点です。
JsonConvert.DeserializeObject(Of List(Of UserListResponse))(ReceivedJSONMessage)
任意のアイデアスマートな方法でこれに取り組む方法:だからJSONはのUserListになりますが、JSONは、エラーメッセージが表示されますときに動作しないときに動作しますdeserialising?
ありがとうございました。私はそのアプローチを理解している。しかし、私はそれをデシリアライズしようとする前に、 "私はリストまたは文字列ですか?"をチェックするためにJSONをどこに置くべきか理解していません。 JsonConvert.DeserializeObjectを使って別の例を教えてください。 – Megrez7
JSONConvert.DeserializeObject(Your API Call)で 'DetermineReturn'内の私の 'ReturnString'メソッドを置き換えることになります。あなたは本質的にリターンをジェネリックな「オブジェクト」としてキャストしています。行動の方向を決定するために入力を差別化するだけです。 – djangojazz
ここでJSONメッセージをタイプしてそれを判別します。このメッセージは文字列です。したがって、非直列化の瞬間にのみ、JSONコンテンツを指定された型に逆シリアル化できるかどうかがわかります。だから私はこれを行う:Dim s = DetermineReturn(Of MyJSONString)? これまでJSONメッセージをUserListResponse(継承なしのクラス)にdeserializeしようとしましたが、これが失敗すると例外を捕捉してからBaseResponseにデシリアライズしています。最後に、私は両方を組み合わせた新しいクラスを作ります。 私はどのように例外を使用するのが好きではありませんが、私は実際にあなたの解決策を理解していません。 – Megrez7