2009-12-22 1 views
1

Document라는 이름의 데이터 집합과 Document라는 클래스가 있습니다.데이터 집합 디자이너 클래스에 정의 된 XmlRoot 특성을 재정의하십시오.

데이터 집합을 serialize 할 때 제 3 자 웹 서비스와 통신 중이므로 "Document"라는 루트가 있어야합니다.

데이터 클래스의 부분 클래스에 XmlRoot이라는 특성을 정의했지만 디자이너 클래스에 이미 정의되어 있으므로 XmlRoot의 복사본을 추가 할 수 없습니다.

[global::System.Xml.Serialization.XmlRootAttribute("DocumentDataSet")] 
public partial class DocumentDataSet : global::System.Data.DataSet { ... } 

나는 디자이너 클래스에서 변경할 수 있지만 내가 디자인 데이터 집합을 열 때마다 다시 얻을.

XmlRoot을 재정의하거나 클래스 이름과 다른 이름으로 직렬화하는 방법이 있습니까?

답변

2

사용할 XML 루트 요소를 나타내는 XmlRootAttribute을 허용하는 XmlSerializer constructor을 사용할 수 있습니다.

이 방법 간단한 Replace로 끝날 경우
class DocumentDataSet : DataSet 
{ 
    public new string GetXml() 
    { 
     return base.GetXml().Replace("DocumentDataSet ", "Document"); 
    } 
} 

가 충분하지 않습니다, 그러나 이것은 단지 설명을 위해입니다 :

new XmlSerializer(typeof(DocumentDataSet), new XmlRootAttribute("Document")); 

이 같은 것을 할 수도 있습니다. 또한 기본 클래스 DataSet에 의한 문서 데이터 세트 인스턴스를 참조하는 경우이 마지막 접근 방식은 작동하지 않습니다.

DataSet ds = new DocumentDataSet(); 

ds.GetXml(); // Wrong 
+0

그래서 직렬화 할 때 우선해야합니까? sound ok –

+0

예,'DocumentDataSet'을 직렬화 할 때, 예제에 지정된대로 루트 요소를 오버라이드해야합니다. –

+0

그러면 GetXml을 serializer 객체를 대신 사용하도록 변경할 수 있습니다. 그것은 가능하지만 많은 일을 필요로합니다 .. urk .. –