2016-08-28 15 views
0

オンラインXMLファイルから読み込み、インターフェイスに読み込んだり、xmlファイルを構造体に変換したり、構造体をランダムに読み込んだりするプログラムに取り組んでいますランダムアクセスファイルからjsonファイルにデータを読み取ります。私は現在、ファイルをシリアル化しようとするとInvalidOperationExceptionを取得しています。コードの一部は、以下である:vb.net XMLSerializer内でGetType()メソッドを使用するとInvalidOperatorExceptionが発生する

Private Sub cmdReadXML_Click(sender As System.Object, e As System.EventArgs) Handles cmdReadXML.Click 
'Read XML from xmlURL, Display in InventoryGV, Write to a Random Access File in the Data directory.' 

Dim xmlFile As XmlReader 
xmlFile = XmlReader.Create(xmlURL) 
Dim ds As New DataSet 
ds.ReadXml(xmlFile) 
InventoryGV.DataSource = ds.Tables(0) 

Dim fileName As String = Directory.GetParent(Directory.GetParent(Directory.GetCurrentDirectory).FullName).FullName + "\Data\raf.xml" 
FileOpen(1, fileName, OpenMode.Random, FileShare.ReadWrite) 
FileClose(1) 
Dim stream As FileStream = New FileStream(fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite) 

Dim Serializer As New Serialization.XmlSerializer(GetType(Inventory)) 

Serializer.Serialize(stream, xmlFile) 

End Sub 

最後の行Serializer.Serialize(stream, xmlFile)メッセージとのSystem.InvalidOperationExceptionをスロー{「XMLドキュメントを生成中にエラーが発生しました。」}。内部例外は{"指定されたキャストは無効です"}と解釈します。

私は前の行Dim Serializer As New Serialization.XmlSerializer(GetType(Inventory))のメソッドGetTypeのランタイム値(インベントリ)を見れば、私はDeclaringMethodエラーを参照してください:「DeclaringMethodは= 'DirectCast((メソッドGetType(インベントリ))、System.RuntimeType)は.DeclaringMethod' 投げました'System.InvalidOperationException'型の例外 "

GetType()メソッドはランタイム値を返していますが、シリアライザはコンパイル時に値を知る必要があります。もしそうなら、コンパイル時に型の値を返す関数はありますか? TypeOf関数は、ブール式でのみ動作するように見えますが、これを行うvb.netの別の関数についてはわかりません。

これが当てはまらない場合、どこが間違っているのですか。これをどのように成功させるにはどうすればいいですか?どんな助けもありがとう。

編集:ここでは、同様のインベントリ構造である:あなたのラインでちょうど一目

<Serializable()> Public Structure Inventory 
    'Create Structure for Putting Inventory into Random Access File 
    Dim id As Integer 
    Dim year As Integer 
    Dim make As String 
    Dim model As String 
    Dim terrain As String 
    Dim mileage As Integer 
    Dim color As String 
    Dim cylinders As Integer 
    Dim transmission As String 
End Structure 

答えて

0

- 私は、インベントリへの参照を見ていないDim Serializer As New Serialization.XmlSerializer(GetType(Inventory))

が、これは順番にInventoryGVすべきではありませんファイルインベントリを呼び出すには?

+0

私はちょうどインベントリ構造のコードを追加しました。 InventoryGVはDataGridViewです(これがGVの略です)。混乱させて申し訳ありません。 –

+0

これを構造体に追加して、他の参照エラーが表示されているかどうかを確認してください.AdHandler AppDomain.CurrentDomain.UnhandledException、AddressOf UnhandledExceptionEventRaised。私はまた、あなたが整数として "年"を使用して、日付としてそれを試してみたり、年がシステムの分母であるように名前を変更したりすることに気付きました。 –

+1

もう一度メモしておいたら、Option Strictをオンにするか、Option Strictをコードの先頭に置きます。 –

関連する問題