2009-07-16 3 views
9

나는 XmlSerializer.Serialize을 사용하고 있으며 줄 바꿈과 불필요한 공백이 생깁니다. 어떻게 피하는가?불필요한 공백과 줄 바꿈없이 XML을 직렬화하는 방법은 무엇입니까? (.NET)

+0

Old,하지만 차이점은 XmlWriter 또는 TextWriter를 사용하고 있는지 여부입니다. 제 경험상, XmlWriter는 기본적으로 서식을 지정하지 않습니다. 이것은 포맷팅이 중요하지 않은 문서를 작성하는 반면, 텍스트 작성자는 직선 텍스트를 쓰는 반면, 의미가 있습니다. – Timothy

답변

17

XmlWriter을 허용하는 오버로드를 사용하고 XmlWriterXmlWriterSettings 인스턴스로 구성 할 수 있습니까?

XmlWriterSettings을 사용하면 줄 바꿈 및 들여 쓰기의 적용을 제어 할 수 있습니다.

void Serialize(Object o) 
{ 
    XmlWriterSettings settings = new XmlWriterSettings(); 
    settings.Indent = false; 
    settings.NewLineHandling = NewLineHandling.None; 
    //settings.OtherProperties = values; 

    using (XmlWriter writer = XmlWriter.Create(CreateStream(), settings)) 
    { 
     _serializer.Serialize(writer, o); 
    } 
} 
+0

고마워요. –

+1

저는이 같은 매개 변수를 주위로 전환해야했습니다 :'_serializer.Serialize (writer, o);'. 좋은 해결책, 고마워! –

2

기본적으로 서식이 없습니다. 난 그냥 다음과 같은 노력하고 어떤 형식 없어 : 샘플 실행에

using (var stream = new MemoryStream()) 
{ 
    System.Text.Encoding encoding; 
    using (var writer = XmlWriter.Create(stream)) 
    { 
     if (writer == null) 
     { 
      throw new InvalidOperationException("writer is null"); 
     } 

     encoding = writer.Settings.Encoding; 
     var ser = new XmlSerializer(obj.GetType()); 
     ser.Serialize(writer, obj); 
    } 

    stream.Position = 0; 
    using (var reader = new StreamReader(stream, encoding, true)) 
    { 
     return reader.ReadToEnd(); 
    } 
} 

를, 다음 XML을 반환

<?xml version="1.0" encoding="utf-8"?><obj xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><childOne /><childTwo /><text>text1</text><text>text2</text></obj> 
+2

어쩌면 당신을 더 좋아할 것입니다 =) –

+0

이러한 불일치는 Microsoft에보고해야합니다. 메서드는 다른 방식으로 동작 할 수 없습니다. 그것은 CultureInfo에 의존적입니까? 또는 .NET 버전/서비스 팩입니까? 나는 아직 모른다. –

+0

기회가 있으면 게시 한 코드를 실행하십시오. .NET 3.5 SP1을 실행 중입니다. 진정한 차이점이 무엇인지 살펴 보겠습니다. –

0

직렬화 클래스 XMLELEMENT처럼 (XML 타입의 구성원을 포함하는 경우도 확인하시기 바랍니다). XsD2Code 도구를 사용하여 XSD에서 클래스를 생성하고 (매우 특별한 경우) XmlElement 유형의 멤버를 만들었습니다. 직렬화 중에이 구성원은 고유 한 형식을 취합니다 (정확한 일치가 필요함). XmlSerializer 들여 쓰기를 설정 (또는 해제) 했더라도 XmlElement 멤버에는 영향을 미치지 않습니다.

관련 문제