2016-08-28 8 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() 메서드는 런타임 값을 반환하지만 serializer는 컴파일 타임에 값을 알아야합니다. 그렇다면 컴파일 타임에 타입 값을 반환하는 함수가 있습니까? 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

구조체에 이것을 추가하여 다른 참조 오류가 나타나는지, 더 자세한 설명이 있는지 확인하십시오. - AddHandler AppDomain.CurrentDomain.UnhandledException, AddressOf UnhandledExceptionEventRaised. 나는 또한 "연도"를 정수로 사용하거나 날짜로 사용해 보거나 연도가 시스템 사용 분모 인 것처럼 이름을 변경하는 것으로 나타났습니다. –

+1

또 다른 메모는 Option Strict를 On으로 설정하거나 Option Strict를 코드 상단에 놓습니다. –