2017-11-17 24 views
0

VB.netからJSON文字列にシリアル化する必要があるオブジェクトがあるため、REST APIを通じてAndroidデバイスに渡すことができます。私はカスタムデータ型のシリアライズVB.net

Dim serializer As New System.Web.Script.Serialization.JavaScriptSerializer() 
Dim serializedObject = serializer.Serialize(obj) 

を通じて、このオブジェクトを渡すときにすべてのフィールドは、すべての

{"dbPtr":""} 

として、空になっている

Public dbPtr As New DataBasePurchaseOrderPointer(listOfFields) 

:しかし、私はシリアル化していたオブジェクトは、次のようなカスタムデータ型が含まれていますオブジェクトのフィールドの「基本」データ型がコアに含まれています。たとえば、フィールド内のデータを読むと、dbPtrは明らかに長いです。

オブジェクトのフィールドの生の値を単純にコピーしてシリアル化できるカスタムシリアライザを通じてこのオブジェクトを渡す方法はありますか?

+1

メンバーは公開されていますか?それらがプライベートなら、シリアライズはそれを読むことができません – Jaxi

+0

例では特定のものは公開されています – djv

+0

クラス(objのクラス)が構築されるとき、初期化されるフィールドはコンストラクタコードが実行される前に行われます。 'public dbPtr As New DataBasePurchaseOrderPointer(listOfFields)'が起きたとき、 'listOfFields'がnullであると思います。これは可能ですか?コードをステップ実行します。 – djv

答えて

0

私の問題を解決するために、私はオブジェクトフィールドの現在のデータを受け取り、それらを辞書に入れる「カスタム」直列化クラスを採用しました。 .ToStringが呼び出されると、フィールドデータは文字列に変換され、辞書に埋め込まれます。その後、REST APIは辞書をシリアル化し、JSONオブジェクトとしてアンドロイド・アプリケーションに渡します。

Public Function serializeObject(obj As Object) As Dictionary(Of String, String) 
    Dim dict As New Dictionary(Of String, String) 
    Dim properties As New ArrayList 

    For Each prop As FieldInfo In obj.GetType.GetFields 
     properties.Add(prop) 
    Next 

    For Each prop In properties 
     Try 
      dict.Add(prop.Name, prop.getValue(obj).ToString) 
     Catch ex As Exception 
      Console.WriteLine(ex.StackTrace) 
     End Try 
    Next 

    Return dict 

End Function 
関連する問題