我从Web服务请求中获得了以下XML。
<Resource>
<Create>
<Name />
<Reference />
...
</Create>
</Resource>
但我也可以拥有以下内容。
<Resource>
<Delete>
<Name />
<Reference />
...
</Delete>
</Resource>
我有一个名为operation的基类,如下所示:
[XmlInclude(typeof(Create))]
[XmlInclude(typeof(Delete))]
public abstract class Operation
{
protected string Name {get; set;}
protected string Reference {get; set;}
...
}
其中Create和Delete类都继承自,而且类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 :(得分:1)
如果将Operation设计为List,则可能有效。如果您需要采取措施,该类用户将始终只有一个操作,则将此列表属性隐藏到普通用户,并在设置了[XmlIgnore]时发布操作属性。
也许XmlElement比XmlArrayItem更适合您的需要。
public class Resource
{
[XmlArrayItem("Create", typeof(Create))]
[XmlArrayItem("Delete", typeof(Delete))]
public List<Operation> {get; set;}
}