2

Portable Class Library中,我有一个包含具有XmlAnyElement属性的成员的类。

public partial class VariableWebServiceResponse {

    private List<System.Xml.XmlElement> anyField;

    public VariableWebServiceResponse () {
        this.anyField = new List<System.Xml.XmlElement>();
    }

    [System.Xml.Serialization.XmlAnyElementAttribute(Order=0)]
    public List<System.Xml.XmlElement> Any {
        get {
            return this.anyField;
        }
        set {
            this.anyField = value;
        }
    }
}

这种类型的类在 .NET 4.0 中完美运行,所以我的代码如下:

    private T Deserialize<T>(VariableWebServiceResponse response)
    {
        var name = typeof(T).Name;
        var element = response.Any.SingleOrDefault(x => x.Name == name);
        return Deserialize<T>(element.OuterXml);
    }

    private static T Deserialize<T>(string xml)
    {
        return (T)new XmlSerializer(typeof(T)).Deserialize(new StringReader(xml));
    }

现在的问题似乎XmlElement是 PCL 不支持该问题。那么如何在 PCL 中获得相同的结果呢?

4

1 回答 1

3

这么晚才回复很抱歉。正如您所注意到的,您不能在便携式中使用 XmlElement,这是因为它仅在 .NET Framework 中可用。Silverlight、Phone 和 Windows Store 应用程序不公开此类型。

但是,我们确实有一个替代品,当面向可移植的 .NET 4.0.3 及更高版本(获得 XLINQ 支持所需)时,您可以使用 XElement* 作为 XmlAnyElementAttribute 的替代品。

* 我刚刚提交了一个错误,以便在文档中更清楚地说明这一点。

于 2012-09-12T17:00:21.730 回答