2016-07-20 6 views
0

VB.NETのHTTPリクエストを使用して、Webサービスからデータを読み込みます。これは、データをこのように送信するために使用:空の配列を返す不正なJsonを直列化解除する

[ 
    { 
     "id": 7532, 
     "nome": "LABOR INC.", 
     "isClient": false, 
     "personality": { 
     "id": 2, 
     "value": "CORPORATION" 
     }, 
     "registryNumbers": [ 
     { 
      "id": 9378, 
      "number": "20786790174" 
     } 
     ], 
     "personality_id": 2 
    }, 
    { 
     "id": 7537, 
     "nome": "JOSE SILVA", 
     "isClient": false, 
     "personality": { 
     "id": 1, 
     "value": "PERSON" 
     }, 
     "gender": { 
     "id": 1, 
     "value": "MALE" 
     }, 
     "cityOfBirth": { 
     "id": 355030, 
     "value": "SAO PAULO" 
     }, 
     "nationality": { 
     "id": 85, 
     "value": "BRAZILIAN" 
     }, 
     "registryNumbers": [ 
     { 
      "id": 9383, 
      "number": "03217495388" 
     } 
     ], 
     "personality_id": 1 
    } 
] 

(「性別」や企業のための「cityOfBirth」など)未使用フィールドが省略されたので、それはOKでした。いくつかの日以来、しかし、それはこのような空の配列([])、としてこれらのフィールドを送り返すために始めた:

{ 
    "id": 7532, 
    "nome": "LABOR INC.", 
    "isClient": false, 
    "personality": { 
    "id": 2, 
    "value": "CORPORATION" 
    }, 
    "gender": [], 
    "cityOfBirth": [], 
    "nationality": [], 
    "registryNumbers": [ 
    { 
     "id": 9378, 
     "number": "20786790174" 
    } 
    ], 
    "personality_id": 2 
} 

そして、これらではないので、そのためには、直列化復元のクラスで運命のプロパティをミスフィット(とすることができます列挙型/配列ではなく単一のオブジェクトです。

私の質問:私はnullを/何もないとして、これらの([])をデシリアライズするために、私のクラスに追加することができますいくつかのデシリアライゼーション拡張子または属性がありますか? VB.NETの場合は特に感謝しますが、C#も読んで適応させることができます。

つまり、配列が単一のオブジェクトを必要とするプロパティに "強制"され、この時点で適切な処理を行うと、コードを停止させる方法を知りたいと思います。

+2

「不正な形式のjson」ではありません。それは完全に有効です。それはそれを扱うことができないあなたの構造です。内部のデリライゼーションを無効にできるものがない場合は、一時構造にデコードし、空の配列を変更して必要なものに変更してからコードにフィードします。 –

+0

ありがとう、@ MarcB。 '[]'はJSONでnull値が表現される方法でもありますか? – VBobCat

+0

番号。 '[]'は空の配列です。それはnullではありません。 jsonのヌル(実際にはJavaScriptのみ)は、文字通り「ヌル」という言葉です。もしあなたが100%**可能ならば、 '[]'がjsonの他のどこにでも現れることは決してありません。デコードする前にjsonに対して単純な '[] - > null'文字列置換を行うことができます。 –

答えて

0

はしようとしたカスタムコンバータでの問題解決:私を助けようとしたすべての人へ

Public Class BogusArrayJsonConverter 
    Inherits JsonConverter 
    Public Overrides Function CanConvert(objectType As Type) As Boolean 
     Return GetType(MyRecord).IsAssignableFrom(objectType) 
    End Function 
    Public Overrides Function ReadJson(reader As JsonReader, objectType As Type, existingValue As Object, serializer As JsonSerializer) As Object 
     If reader.TokenType = JsonToken.StartArray Then 
      Return serializer.Deserialize(Of MyRecord())(reader).SingleOrDefault 
     Else 
      Return serializer.Deserialize(Of MyRecord)(reader) 
     End If 
    End Function 
    Public Overrides Sub WriteJson(writer As JsonWriter, value As Object, serializer As JsonSerializer) 
     Throw New NotImplementedException() 
    End Sub 
End Class 

感謝を。

関連する問題