2013-09-23 2 views
0

웹 서비스 요청에서 다음 XML을 가져 왔습니다.XML에서 추상 클래스 직렬화하기

<Resource> 
    <Create> 
     <Name /> 
     <Reference /> 
     ... 
    </Create> 
</Resource> 

그러나 다음과 같은 경우도 있습니다.

<Resource> 
    <Delete> 
     <Name /> 
     <Reference /> 
     ... 
    </Delete> 
</Resource> 

나는 다음과 같이 작동라는 기본 클래스가 있습니다

[XmlInclude(typeof(Create))] 
[XmlInclude(typeof(Delete))] 
public abstract class Operation 
{ 
    protected string Name {get; set;} 
    protected string Reference {get; set;} 
    ... 
} 

하는 둘 모두 Operation 속성이 포함 Resource이라고 생성 및 삭제에서 상속 클래스의 클래스.

public class Resource 
{ 
    public Operation {get; set;} 
} 

I 클래스 Operation의 올바른 구체적인 구현에 XML을 역 직렬화하고 싶습니다.

나는 T이 유형 Resource입니다

using (var reader = XmlReader.Create(new StringReader(xmlData))) 
{ 
    return (T)new XmlSerializer(typeof(T)).Deserialize(reader); 
} 

을 시도했지만 아무 소용 (Operation 속성은 항상 null입니다). 아무도 올바른 방향으로 나를 가리킬 수 있습니까?

답변

0

작업 목록으로 설계하면 작동 할 수 있습니다. 클래스의 사용자에 대해 항상 하나의 작업 만 수행하도록 측정해야하는 경우이 목록 속성을 일반 사용자로 숨기고 [XmlIgnore]가 설정된 작업 속성을 게시하십시오.

아마도 XmlElement는 XmlArrayItem보다 사용자의 요구에 더 적합한 요소 일 수 있습니다.

public class Resource 
{ 
    [XmlArrayItem("Create", typeof(Create))] 
    [XmlArrayItem("Delete", typeof(Delete))]  
    public List<Operation> {get; set;} 
}