0

我有以下来自 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)。有人可以指出我正确的方向吗?

4

1 回答 1

1

如果您将操作设计为列表,可能会起作用。如果您需要采取措施,该类的用户始终只有一个操作,则将此列表属性隐藏给普通用户并发布一个操作属性,同时设置 [XmlIgnore]。

也许 XmlElement 比 XmlArrayItem 更适合您的需要。

public class Resource
{
    [XmlArrayItem("Create", typeof(Create))]
    [XmlArrayItem("Delete", typeof(Delete))]    
    public List<Operation> {get; set;}
}
于 2013-09-23T14:22:45.510 回答