2013-02-28 3 views
0

객체에승리 RT 역 직렬화 된 XML은 내가 고문에 대한 몇 가지 정보를 보유하는 클래스를 가지고

<AdviserDetails xmlns="http://schemas.datacontract.org/2004/07/MortgageApp_2" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><AddressOne>242 Office Block</AddressOne><AddressTwo>32 Hill Street</AddressTwo><City>Birmingham</City><Company>Best Mortgages</Company><Consultant>Bill Jones</Consultant><County>West Midlands</County><Postcode>B1 1AB</Postcode><Telephone>05100021300</Telephone></AdviserDetails> 

다음 코드는 XML을 유형이 AdviserDeta 인 객체로 역 직렬화하는 데 사용됩니다 ILS :

StorageFolder folder = ApplicationData.Current.LocalFolder; 
     string fileName = "AdviserDetails.xml"; 
     string location = folder.Path + "\\" + fileName; 
     var file = await StorageFile.GetFileFromPathAsync(location).AsTask().ConfigureAwait(false); 
     var stream = await file.OpenStreamForReadAsync().ConfigureAwait(false); 

     var serializer = new XmlSerializer(typeof(AdviserDetails)); 
     var loadAdviser = (AdviserDetails)serializer.Deserialize(stream.AsInputStream().AsStreamForRead()); 

그러나, 마지막 줄 :

var loadAdviser = (AdviserDetails)serializer.Deserialize(stream.AsInputStream().AsStreamForRead()); 

이 예외가 발생합니다 : XML 문서에 오류가 있습니다

(1, 2).

잘못된 점을 알고 누구에게 내 응용 프로그램에서 읽을 수있는 XMl 파일을 만들 수 있습니까?

감사합니다. :)

답변

1

는 다음과 같이하십시오 :

시리얼을 :

static async private Task SaveAsync<T>() 
    { 
     StorageFile sessionFile = await ApplicationData.Current.LocalFolder.CreateFileAsync(filename, CreationCollisionOption.ReplaceExisting); 
     IRandomAccessStream sessionRandomAccess = await sessionFile.OpenAsync(FileAccessMode.ReadWrite); 
     IOutputStream sessionOutputStream = sessionRandomAccess.GetOutputStreamAt(0); 
     var sessionSerializer = new DataContractSerializer(typeof(List<object>), new Type[] { typeof(T) }); 
     sessionSerializer.WriteObject(sessionOutputStream.AsStreamForWrite(), _data); 
     await sessionOutputStream.FlushAsync(); 
    } 

디시리얼라이저를 :

static async private Task RestoreAsync<T>() 
    { 
     StorageFile sessionFile = await ApplicationData.Current.LocalFolder.CreateFileAsync(filename, CreationCollisionOption.OpenIfExists); 
     if (sessionFile == null) 
     { 
      return; 
     } 
     IInputStream sessionInputStream = await sessionFile.OpenReadAsync(); 
     var sessionSerializer = new DataContractSerializer(typeof(List<object>), new Type[] { typeof(T) }); 
     _data = (List<object>)sessionSerializer.ReadObject(sessionInputStream.AsStreamForRead()); 
    } 

작업 예 : Here

+1

그것이 결국 작업있어, 감사 당신은 대단히 링크입니다. :) 승리 RT에서 XML을 구현하는 것은 진정한 임무입니다! – Cheese1223