2010-08-15 3 views
1

BinaryFormatter을 사용하여 개체를 직렬화합니다. 관련 목록에 다양한 객체 유형이 있습니다. 모든 객체를 하나의 파일로 직렬화하는 '가장 좋은'방법이 있지만 직렬화 해제시 분리 할 수 ​​있습니까? 지금은 전체 파일을 비 직렬화하고 각 객체의 특정 필드를 검사하여 비 직렬화 후에 다시 추가해야하는 목록을 확인합니다. 예를 들어 내 모든 포드 자동차에는 'FORD'필드가 있고 Toyota에는 'TOYOTA'등이 있습니다. deserialization이 끝나면 개체를 통해 'foreach'하고 '회사'필드를 확인한 다음 List<Company>에 할당합니다.다양한 형식을 하나의 파일로 직렬 변환

가장 효율적인 방법인지 확실하지 않습니다. 어떤 제안? 도움을 주셔서 감사합니다

답변

3

각 항목을 직렬화하는 대신이 방법이 쉽습니다. 단순히 각 항목 유형에 대한 속성을 가진 "상위"클래스를 만드십시오. 그런 다음 하나의 객체를 직렬화 할 수 있습니다. 당신이 반대쪽에 그것을 deserialize 할 때, 그것은 이미 당신을 위해 전체 정렬 될 것입니다.

0

이 작업을보다 효율적으로 수행 할 수있는 유일한 방법은 도메인에 적합한 필드 기준에 따라 파일을 다른 파일로 직렬화하는 것입니다. 특정 순서로 파일에 직렬화되도록 보장 할 수는 없으므로 필드 값이 사용자의 유형 인 모든 유형 인스턴스를 찾기 위해 비 직렬화 할 때 전체 파일을 메모리로 읽어야합니다 찾고.

여러분은 이미 파일 직렬화의 제약 조건에서 최선을 다하고 있다고 생각합니다. SQLite를 저장소 메커니즘으로 간주 했습니까?

0

사전과 같은 소리 (Dictionary<string, List<Company>>). 그래도 질문에 약간의 소스 코드를 제공하십시오.

사전을 직렬화하는 기본 제공 방법은 없지만 사용자 지정 클래스를 만들 수 있습니다. 그게 당신에게 Google로 운동으로 떠날거야 :

동일한 방법으로 직렬화를 계속하지만 개체 내에있는 알려진 멤버에 의해 분리하려면 (그리고 그 멤버는 항상 동일합니다) 당신이 가지고있는 경우를 통해 그것을 할 수 있습니다, 목록을 분리,

IEnumerable<Company> companiesFromFile = GetDeserializedFile(); 
var dictionaryFromFile = companiesFromFile.ToDictionary(c => c.Name); 

다음 :

List<Company> toyotaList = dictionaryFromFile["Toyota"]; 
// etc 
, 당신은 짧은 코드를 사용하여 객체를 추출하기 위해 LINQ 쿼리를 사용할 수 있습니다
관련 문제