2013-09-23 56 views
0

我有從Web服務請求進來的以下XML。De序列化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;} 
    ... 
} 

這兩者從創建和刪除繼承和類稱爲Resource其中包含一個Operation屬性的類。

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

我想將XML反序列化爲類Operation的正確具體實現。

我已經試過

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

其中T是類型Resource,但無濟於事(Operation屬性始終null)。請有人指出我正確的方向嗎?

回答

0

如果您將操作設計爲列表,則可能會工作。如果您需要採取措施,那麼對於該類的用戶總是隻有一個操作,然後將此列表屬性隱藏給普通用戶,併發佈一個也設置了[XmlIgnore]的操作屬性。

也許XmlElement比XmlArrayItem更適合您的需要。

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