2012-05-07 1 views
0

에 객체를 직렬화하려고 : 나는 그래서 다음 스카이 드라이브에 해당 파일을 저장할 수 있습니다 XML로 내 객체 (들)을 변환하기 위해 노력하고있어는 WP7 & C# .NET을 사용하여 XML

. 행운을 빌리지 않고 많은 예제를 따라했습니다. 이 코드로 나는

public void ConvertObjectToXmlString() 
     { 
      System.IO.MemoryStream ms = new System.IO.MemoryStream(); 
      System.Xml.Serialization.XmlSerializer xs = new System.Xml.Serialization.XmlSerializer(App.ViewModel.vehicleItemsCollection.GetType()); 
      System.Xml.XmlWriter xtw = System.Xml.XmlWriter.Create(ms); 
      //System.Xml.XmlTextWriter xtw = new System.Xml.XmlTextWriter(ms, System.Text.Encoding.UTF8); 

      xs.Serialize(xtw, App.ViewModel.vehicleItemsCollection[0]); 

      MessageBox.Show(xtw.ToString()); 
     } 

오류가이 라인에이야 : xs.Serialize(xtw, App.ViewModel.vehicleItemsCollection[0]); 내가 컬렉션을 가지고 내 테스트에서 단 1 항목이 있습니다. 그러나 나는 내가 인덱스 [0]을 설정하지 않을 것이라고이 코드를 결국 발표 할 때 그것을 상상할 수 있습니다.

오류 상태 : 나는 다음을 참조 오류 메시지에 더 이상 갈 때 XML 문서

를 생성하는 중에 오류가 발생했습니다 : 은의 객체 타입 OilChangeApplication.vehicle의 객체를 할당 할 수 없습니다가 System.Collections.ObjectModel.ObservableCollection`1 [[OilChangeApplication.vehicle, OilChangeApplication, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null]]을 입력하십시오.

VehicleItemsCollection은 차량 모음입니다. XML을 가져 오기 위해이 파일을 업로드하려면 어떻게해야합니까?

+0

무엇 당신의 vehicleItem 모델은 어떻게 구성 되나요? 메모리가 작동하면 직렬화 기가 객체 유형을 처리하는 방법을 알 수 있도록 모델에서 약간의 메타 데이터 마크 업을 수행해야합니다. –

+0

속성을 언급하고 있습니까? 지금은 아무 것도 없습니다. – webdad3

+0

@ Dillie-O 모델 클래스 정의에'[XmlSerializable]'(일명 XmlSerializableAttribute)를 추가하는 것에 대해 이야기하고 있다고 생각합니다. 유용하지만이 오류의 원인은 아닙니다. – jv42

답변

3

컴파일러에서 약간의 번역으로 오류가 매우 명확하게 보입니다. 유형의 개체를 할당 할 수 없습니다.을 ObservableCollection<OilChangeApplication.vehicle> 유형의 개체에 지정합니다. 때문에 대신에이 부분에 위의 시리얼 말했다 같은 ObservableCollection<...>를 전달

xs.Serialize(xtw, App.ViewModel.vehicleItemsCollection[0]); 

:

그것은 컬렉션의 당신의 색인이 여기 오류의 원인이 의미 new XmlSerializer(App.ViewModel.vehicleItemsCollection.GetType());을, 당신의 인스턴스를 전달하는 귀하의 모델 클래스.

따라서 [0]을 제거하거나 시리얼 라이저로 전달할 유형을 변경하면 오류가 사라질 수 있습니다.

xs.Serialize(xtw, App.ViewModel.vehicleItemsCollection); 

또는

var xs = new System.Xml.Serialization.XmlSerializer(OilChangeApplication.vehicle.GetType()); 
3

제 생각 엔 당신이 컬렉션의 Item을 직렬화하는 것입니다. 모든 컬렉션을 직렬화하려면 전달할 필요가 있습니다.

xs.Serialize(xtw, App.ViewModel.vehicleItemsCollection); 

명확하게하십시오. 이 작성자 :

ObservableCollection<OilChangeApplication.vehicle> 

을 그리고 당신은 OilChangeApplication.vehicle 인스턴스의 OilChangeApplication.vehicle하지 컬렉션의 인스턴스를 직렬화 통과 :

XmlSerializer(App.ViewModel.vehicleItemsCollection.GetType()); 

당신은 시리얼 타입의 객체를 직렬화 할 수있는 작업을 지정합니다.

xs.Serialize(xtw, App.ViewModel.vehicleItemsCollection[0]); 
:

이제
XmlSerializer(typeof(OilChangeApplication.vehicle)); 

당신이 하나의 개체를 직렬화 할 수 있습니다 : 당신이 다음 단지 하나의 객체를 직렬화하려면


는 그리고 당신은 OilChangeApplication.vehicle 당신이 직렬화됩니다 시리얼을 "에게"필요

+0

예, 오류의 의미와 같습니다. –