2014-06-07 3 views
3

XML 문서로 C# 개체를 serialize하고 XML 문서를 타사 공급 업체로 보냅니다. 공급 업체에서 문서의 인코딩 사양이 UTF-16이지만 XML 문서에 UTF-8 콘텐츠가 포함되어있어 사용할 수 없다고 알려줍니다. 다음은 오류없이 실행되고 XML 문서를 만드는 XML 파일을 만드는 데 사용하는 코드입니다.C#에서 개체 직렬화시 XML 인코딩 지정 방법

// Instantiate xmlSerializer with my object type. 
XmlSerializer xmlSerializer = new XmlSerializer(typeof(MyObject)); 

// Instantiate a new stream and pass file location and mode. 
Stream stream = new FileStream(@"C:\doc.xml", FileMode.Create); 

// Instantiate xmlWriter and pass stream and encoding. 
XmlWriter xmlWriter = new XmlTextWriter(stream, Encoding.Unicode); 

// Call serialize method and pass xmlWriter and my object. 
xmlSerializer.Serialize(xmlWriter, myObject); 

// Close writer and stream. 
xmlWriter.Close(); 
stream.Close(); 

I이 실행되면, XML 문서가 첫 번째 줄에 표시됩니다 : 나는 XmlTextWriter에에 Encoding.UTF8에 Encoding.Unicode에서 인코딩을 변경하려고했습니다

<?xml version="1.0" encoding="UTF-16"?> 

하지만를 XML Doc의 첫 번째 줄은 변경되지 않고 여전히 UTF-16을 보여줍니다.

또한 4 매개 변수 (작성자, 개체, 네임 스페이스, 인코딩) 및 지정된 UTF8을 인코딩으로 사용하는 Serialize 메서드 서명을 사용하여 시도했지만 XML Doc 사양도 변경되지 않았습니다.

XML Doc에서 보여주는 인코딩을 UTF-8로 변경하면 제 3의 공급 업체가 만족할 것이라고 생각합니다. 내가 뭘 잘못하고 있는지 알 수 없다.

답변

2

Encoding.Unicode에서 Encoding.UTF8으로 변경하면 파일이 올바르게 생성됩니다. 파일의 이전 버전을보고 계신 것 같습니까?

XmlSerializer xmlSerializer = new XmlSerializer(typeof(MyObject)); 

using (Stream stream = new FileStream(@".\doc.xml", FileMode.Create)) 
using (XmlWriter xmlWriter = new XmlTextWriter(stream, Encoding.UTF8)) 
{ 
    xmlSerializer.Serialize(xmlWriter, myObject); 
} 
+0

나는 다시 한 번 확인 해보자 : 관련이없는 비트에서

, 당신은 IDisposable를 구현하는 객체의 결정 처분 using를 사용해야합니다. –

+0

인코딩을 UTF8로 변경 한 후 코드를 다시 실행했지만 UTF-16 사양의 XML 문서를 출력합니다. 닫기 대신에 using을 사용하도록 코드를 변경하겠습니다. –

+0

글쎄, 나는 바보 야. 이 작업을 수행하는 장소는 두 곳 (이벤트)이었으며 한 곳에서 다른 장소로 변경하고 테스트했습니다. 그것은 작동합니다. XmlWriter의 인코딩을 UTF8로 변경하면 작동합니다. –