2014-07-07 5 views
0

.NET의 XML 라이브러리에 익숙하지 않아서 IXmlSerializable 인터페이스 주위를 감싸고 있습니다. 윈도우 스토어 앱 (W8)을 개발 중이며 IXmlSerializable 인터페이스를 사용하고자하지만 문제가 발생합니다. XmlWriter의 팩토리 메서드를 사용하지만 XmlTextWriter를 Windows 저장소 앱에서 사용할 수 없지만 내 코드가 XML 파일 (해당 빈 항목)에 아무 것도 출력하지 않습니다.Windows 8 store app XmlWriter가 파일에 아무 것도 쓰지 않습니다.

XmlSerializer를 사용하면 XML 파일이 예상대로 출력되지만 프로덕션 응용 프로그램에서 개인 필드가 있으므로 IXmlSerializable을 구현할 수 있습니다. 여기

은 코멘트 스레드를 감안할 때

private async void saveButton_Click(object sender, RoutedEventArgs e) 
    { 
     XMLTest t = new XMLTest("test name"); 

     StorageFolder folder = ApplicationData.Current.LocalFolder; 
     Stream fs = await folder.OpenStreamForWriteAsync("testingXML.xml", CreationCollisionOption.ReplaceExisting); 
     XmlWriterSettings settings = new XmlWriterSettings(); 
     settings.ConformanceLevel = ConformanceLevel.Auto; 
     var x = XmlWriter.Create(fs, settings); 

     //XmlSerializer xs = new XmlSerializer(t.GetType()); 
     //xs.Serialize(fs, t); 

     t.WriteXml(x); 
     fs.Dispose(); 
    } 
+1

'x.Close() '를 호출 해 보았습니까? 모든 것이 버퍼링되었는지 궁금합니다 ... (이상적으로는'fs'와'x'에'using' 문을 사용하십시오.) –

+0

fs와 x는 디버그 할 때 어떻게 보이나요? 정보가 있습니까? – Bit

+0

@JonSkeet 버퍼링 문제인 것처럼 보입니다. xml 작가에게 flush를 호출하면 문제가 해결되었습니다. 감사. –

답변

1

뒤에 내 XAML 코드에서

public class XMLTest : IXmlSerializable 
{ 
    private string name; 
    public string Name { get { return this.name; } set { this.name = value; } } 

    private XMLTest() { } 

    public XMLTest(string name) 
    { 
     this.name = name; 
    } 

    public System.Xml.Schema.XmlSchema GetSchema() 
    { 
     return null; 
    } 

    public void ReadXml(System.Xml.XmlReader reader) 
    { 
     throw new NotImplementedException(); 
    } 

    public void WriteXml(System.Xml.XmlWriter writer) 
    { 
     writer.WriteAttributeString("Name", this.name); 
    } 
} 

을 사용하고있는 샘플 코드 - 이것은 모든 자원을 폐쇄하지 관하여이었다. fs (예외가 발생하지 않은 경우 수동으로 처리)은 처리하지만 x은 처리하지 않습니다. 다음과 같이 모든 것에 대해 using 문장을 사용해야합니다.

using (var stream = await folder.OpenStreamForWriteAsync(...)) 
{ 
    var settings = new XmlWriterSettings { ConformanceLevel = ConformanceLevel.Auto }; 
    using (var writer = XmlWriter.Create(stream, settings)) 
    { 
     t.WriteXml(writer); 
    } 
} 
관련 문제