2012-07-31 2 views
1

데이터가 네트워크가 아닌 데이터베이스에서 도착하는 프로젝트가 있고 자체 파싱 특성이 있습니다.개체 데이터 원본 데이터를 디스크에 저장하는 방법은 무엇입니까?

구문 분석 프로세스는 데이터가 Public Property으로 가득 찬 클래스의 개체 배열에 저장합니다.

이 클래스와 해당 배열은 값을 화면의 DataGridView에 멋진 테이블로 표시하는 BindingSource에 대한 개체 데이터 원본으로 사용됩니다.

이제이 데이터를 디스크에 저장해야합니다. 나중에 네트워크로 다시 보내려면 데이터를 검색 할 수 있어야합니다.

DataSet을 XML로 저장하기 전에 작업 해 보았지만 구현하기가 쉽지만이 문제는 저를 혼란스럽게합니다.

이 모든 정보는 이미 코드에 들어 있으므로 한 줄씩 입력해야한다고 생각하지 않습니다. 각 속성을 저장하면됩니다. 바인더에서 데이터를 가져 와서 새로운 DataSet으로 가져 오는 방법을 시도해 보았습니다. XML 메서드를 사용하거나 바인더에서 디스크로 가져 오거나 DataSource 개체에 직접 액세스하는 방법을 사용할 수 있습니다.

나중에 DataSource 객체로 다시 읽을 수있는 한 평범한 텍스트로 읽을 수 있다면 정말 신경 쓰지 않아도됩니다.

아이디어를 달성하는 방법은 무엇입니까?

+0

당신은 제목에서 VB.NET을 제거하는 이유 Filburt 안녕하세요, 나는 그것이 확실하지 않다 태그가 아니라 프로그래밍하는 플랫폼을 설명함으로써 질문에 대한 컨텍스트를 제공합니다. – Budius

답변

1

가 왜 그냥 개체를 저장하는 XmlSerializer 사용 참조?


예 :

Class MyData 
    Public Property Data1 As String 
    Public Property Data2 As Int32 
    Public Property Data3 As String() 
End Class 

Sub Main 

    Dim d = New MyData() With { _ 
     .Data1 = "FooBar", _ 
     .Data2 = 1337, _ 
     .Data3 = new String(){"Foo", "Bar"} _ 
    } 

    Dim serializer = new System.Xml.Serialization.XmlSerializer(gettype(MyData)) 

    '' Saving an object 
    Using fs = new System.IO.FileStream("c:\users\username\mydata.xml", System.IO.FileMode.Create) 
     serializer.Serialize(fs, d) 
    End Using 

    '' Loading the saved data to a new object   
    Using fs = new System.IO.FileStream("c:\users\username\mydata.xml", System.IO.FileMode.Open) 
     Dim new_one = CType(serializer.Deserialize(fs), MyData) 
     '' Do something 
    End Using 

End Sub 

결과 파일 내용 :

<?xml version="1.0"?> 
<MyData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <Data1>FooBar</Data1> 
    <Data2>1337</Data2> 
    <Data3> 
    <string>Foo</string> 
    <string>Bar</string> 
    </Data3> 
</MyData> 
+0

당신과 다른 남자는 거의 같은 순간에이 같은 대답을 제안했습니다. 나는 이것이 존재한다는 것을 몰랐고, 지금 시도 할 것이다. – Budius

+0

훌륭한 반응, 매우 훌륭하고 완벽합니다. 그냥 코멘트, 나는'시리얼 serializer = My System.Xml.Serialization.XmlSerializer (gettype (MyData()))'를 사용해야했다. 그래서 직렬자는 MyData의 배열이된다. 그리고 부드럽게 작동합니다. 저장 대화 상자 및 기타 세부 정보를 추가하기 만하면됩니다. 감사! – Budius

+0

@Budius 기쁘게 도와 드릴 수 있습니다. :-) – sloth

1

직렬화는 어떻게됩니까?

Dim fileStream As Stream = File.Open("somefile.txt", FileMode.Create) 
Dim xmlFormatter As New System.Xml.Serialization.XmlSerializer(GetType(YourClass)) 
xmlFormatter.Serialize(fileStream, anObjectOfYourClass) 
fileStream.Close() 

이 작업을 수행하려면 클래스에 Serializable() 속성으로 주석을 추가해야합니다. 이 속성은 NonSerialized() 속성을 제외한 모든 속성을 저장합니다. 물론 클래스의 모든 유형은 직렬화 가능해야합니다.

나중에 데이터를로드하려면 xmlFormatter.Deserialize()을 사용한다는 점을 제외하고 절차는 비슷합니다.

the documentation.

+0

당신과 다른 남자는 거의 같은 순간에이 같은 대답을 제안했습니다. 나는 이것이 존재한다는 것을 몰랐고, 지금 시도 할 것이다. – Budius

관련 문제