는 내 객체를 직렬화하기 위해이 방법을 사용하고 있습니다 :<?xml ?> .NET에서 xml serialization의 일부를 제어하는 방법은 무엇입니까?
public static string XmlSerialize(object o)
{
var stringWriter = new StringWriter();
var xmlSerializer = new XmlSerializer(o.GetType());
xmlSerializer.Serialize(stringWriter, o);
string xml = stringWriter.ToString();
stringWriter.Close();
return xml;
}
은 다음과 같이 시작 XML을 만드는 :
<?xml version="1.0" encoding="utf-16"?>
<MyObject xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
하지만 그것은 다음과 같이 할 :
<?xml version = "1.0" encoding="Windows-1252" standalone="yes"?>
<MyObject xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
그렇다면 인코딩을 Windows-1252로 변경하고 standalone = yes로 설정하는 방법은 무엇입니까? 또한 xmlns 값을 제외하도록 객체를 가져 오는 방법은 무엇입니까?
this one과 같은 몇 가지 비슷한 질문을 보았습니다.하지만 나에게 어쩌면 어딘가에 어떤 속성을 설정하면 더 간단 할 것 같았습니까?
업데이트 2 : John의 대답과 의견을보고 나서 이것에 대해 더 생각한 후에 두 번째 방법을 만들기로했습니다. 한 번에 제 3자를 위해이 엉뚱한 사용자 지정 XML을 만드는 것이 처음부터 "XmlSerialize"와 같은 일반적인 것으로 호출되어야한다고 생각하지 않습니다.
그래서, XML 문서를 취하는 두 번째 방법을 만들어 먼저,이 같은 네임 스페이스 요소 제거 : 그것은 그것은 요한의 코드와 XML에 기록, 다음
xElement.Attributes().Where(a => a.IsNamespaceDeclaration && a.Value == "http://www.w3.org/2001/XMLSchema").Remove();
합니다.
new XDeclaration("1.0", "Windows-1252", "yes").ToString()
을 그리고 그 추한하지만, 정확히 내가 XML을 이해하기 위해 제 3 자에 필요한 걸 가져옵니다 마지막으로이의 출력 다음, 그 XML을 반환합니다.
정말 'XmlTextReader'와'XmlTextWriter' 대신'XmlReader.Create'와'XmlWriter.Create'를 사용하십시오. 또한 이러한 것들을'using '블록에 넣을 필요가 있습니다. –
궁극적으로 나는 당신의 코드를 가지고 갔다. 그러나 모든 것이 닫히는 한 블록을 사용하는 것만 큼 좋은 점이 아닌가 궁금합니다. – Chris
아니요. '사용'블록은 예외가 발생하더라도 개체가 삭제되었는지 확인합니다. –