在 XML 中反序列化抽象类
本文关键字:抽象类 反序列化 XML | 更新日期: 2023-09-27 18:32:21
我有以下XML来自Web服务请求。
<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
)。有人可以指出我正确的方向吗?
如果将操作设计为列表,则可能有效。如果需要测量类的用户始终只有一个操作,请将此列表属性隐藏给普通用户,并在设置 [XmlIgnore] 的情况下发布操作属性。
也许XmlElement比XmlArrayItem更适合您的需求。
public class Resource
{
[XmlArrayItem("Create", typeof(Create))]
[XmlArrayItem("Delete", typeof(Delete))]
public List<Operation> {get; set;}
}