2014-11-17 3 views
0

세 부분으로 구성된 질문.C에서 직렬화를 사용하여 사용자 정의 파일 저장 및 열기 #

나는 어제 중첩 클래스에 대해 물어 보았습니다. (그런데 큰 도움이되었습니다.) 그러나 이제는 MDI를 사용하여 여러 일반 상점과 해당 인벤토리를 추적하여 사용자 지정 .inv 파일에서 열 때마다 인스턴스화되는 동일한 프로그램을 계속 사용하고 있습니다. 이를 위해, Store 클래스와 Record 클래스는 상기 커스텀 파일에 저장하기 위해 직렬화 가능하다.

나는 그것이 무엇인지 모르지만, 나는 단지 직렬화를 이해하지 못한다. 나는 그 개념을 충분히 이해하고 있으며, 단지 연습이 아니므로 인내심을 요청합니다.

파트 1) .inv 파일 확장명을 사용하여 파일에 저장 한 내용을 저장하도록 설계된 원래 형식의 saveFileDialog를 만들었습니다. 자, 문제는 정확히 나중에 파일을 열 수있는 방법으로 저장하기 위해 인스턴스화 된 클래스를 전달하는 것입니까?

2 부) openFileDialog의 경우 두 부분으로 구성됩니다.

첫째, 위에 저장 한 후 어떻게 정보를 읽습니까? 즉, 모든 값을 저장하기 위해 이름이 변경된 파일 확장명을 가진 텍스트 문서를 사용하여 저장 이름과 레코드를 한 번에 하나씩 읽을 수 있다고 생각했지만, 필자는 직렬화뿐만 아니라 필요도 모르기 때문에 그것이 좋은 생각인지 아닌지 나는 모른다.

둘째, 내가 열려고하는 인스턴스를 인스턴스화하는 방법은 무엇입니까? 클래스의 인스턴스 하나를 만드는 것만 큼 간단하며 새 문서를 열 때마다 모든 것을 지우고 열린 파일의 값을 추가하거나 그보다 더 복잡합니까?

클래스에 대한 코드는 아래에 있습니다.이 코드는 내가 저장하려고하는 것에 대한 아이디어를 줄 것입니다. 다른 코드가 필요하면 알려주십시오.

using System.Text; 
using System.Threading.Tasks; 

namespace Inventory 
{ 
    [Serializable] 
    class Store 
    { 
     public Store() { } 
     public Store(string name) { } 
     public string name { get; set; } 

     public List<Record> Records { get; private set; } 
    } 

    [Serializable] 
    class Record 
    { 
     public Record() { } 
     public Record(int ID, int Quantity, double Price, string Name) { } 
     public int id { get; set; } 
     public int quantity { get; set; } 
     public double price { get; set; } 
     public string name { get; set; } 
    } 
} 

답변

0

당신은 (내가 예를 들어 당신을 위해 하나를 구축 한)/역 직렬화 문자열을 직렬화하는 간단한 도우미를 사용할 수 있습니다 : 당신 MDI 응용 프로그램 지금

public static class StoreHelper 
{ 
    public static string Serialize(Store store) 
    { 
     var xmlSerializer = new XmlSerializer(typeof(Store)); 
     var textWriter = new StringWriter(); 

     xmlSerializer.Serialize(textWriter, store); 
     return textWriter.ToString(); 
    } 

    public static Store Deserialize(string xml) 
    { 
     var serializer = new XmlSerializer(typeof(Store)); 
     Store result; 

     using (TextReader reader = new StringReader(xml)) 
     { 
      result = (Store)serializer.Deserialize(reader); 
     } 

     return result; 
    } 
} 

을 당신은을 사용하여 저장 XML을 관리 할 수 ​​있습니다 도우미 :

// Generate Store XML from Object. 
var storeXml = StoreHelper.Serialize(myStore); 
// Generate Store Object from XML. 
var store = StoreHelper.Deserialize(storeXml); 

이제 파일에서 xml을 읽고 쓸 수 있습니다. 도움이되기를 바랍니다.

0

.NET 당신을 위해 그것을하자 :

private void Serialize(Store store, string path) 
{ 
    var xmlSerializer = new XmlSerializer(typeof(Store)); 

    using (var streamWriter = new StreamWriter(path)) 
    { 
     xmlSerializer.Serialize(streamWriter, store); 
    } 
} 

private Store Deserialize(string path) 
{ 
    var xmlSerializer = new XmlSerializer(typeof(Store)); 

    using (var streamReader = new StreamReader(path)) 
    { 
     return xmlSerializer.Deserialize(streamReader) as Store; 
    } 
}