2014-10-03 2 views
0

내가 개체를 XML로 직렬화하고 문자열을 반환하는 방법이 있습니다.xmlserializer에 특정 이스케이프 문자를 추가하려면 어떻게해야합니까?

public static string SerializeType<T>(T item) 
    { 
     var serializer = new XmlSerializer(typeof(T)); 
     var builder = new StringBuilder(); 
     var settings = new XmlWriterSettings(); 
     settings.OmitXmlDeclaration = true; 
     using (var stringWriter = XmlWriter.Create(builder, settings)) 
     { 
      serializer.Serialize(stringWriter, item); 
      return builder.ToString(); 
     } 
    } 
그러나

, 그것이 내가 전달 객체의 문자열에서 모든 예약 된 문자를 제거되지 않습니다 마이크로 소프트가 나열 Reserved Characters &> <로 %. "abc & cd % d"문자열 필드가있는 항목을 입력하면 세미콜론 앞에 공백없이 "& lt; ab & gt; bc & amp; cd % d"가됩니다. %가 이스케이프되지 않습니다. 백분율에 올바른 이스케이프 시퀀스를 추가하려면 어떻게합니까? 클라이언트의 앱에 %를 보내면 오류가 발생합니다. 해당 페이지에 나열된 이스케이프로 문제가 해결됩니다.

답변

1

%은 실제로 XML에서 예약 된 문자가 아닙니다. 당신이 참조한 문서는 SQL 서버용이며 표 아래에는 작은 메모가 있습니다.

Notification Services XML 어휘는 매개 변수를 나타 내기 위해 백분율 기호 (%)를 예약합니다.

하지만 당신은 당신을 위해 %을 탈출 XmlSerializer (또는 다른 범용 XML 라이브러리)를 기 대해서는 안된다. 을 사용하는 경우가 아니면 "Notification Services XML"이 문제가되지 않을 것으로 예상됩니다.

+0

이 문자를 추가해야하는 이유에 대한 정보를 추가했습니다. 클라이언트의 애플 리케이션이 변경 /이 결함을 제거해야하지만이 궁극적으로 내게 떨어질 것 같아요. 이 답변은 내 질문에 실제로 대답하지 않습니다. 시리얼 라이저가 아닌 경우 어떻게 처리 할 것인가? – Bishop

+1

@ 비숍 : 클라이언트의 앱은 무엇입니까? 그리고 왜 그들은 그것을 고칠 수 없습니까? 당신이 정말로 필요하다면, 나중에 문자열에서'%'를 수동으로 대체 할 수는 있지만, 적어도 클라이언트가 완벽하게 좋은 XML을 거부하고 있음을 알리도록해야합니다. –

+0

자바 서블릿입니다. 그들에게 알려주는 것은 주어진 것이었다. 그들은 방금 느린 변화를 보이고 이미 상당한 양의 백로이 있음을 입증했습니다. Jon의 도움에 감사드립니다. – Bishop

관련 문제