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、電話、および Windows ストア アプリは、この型を公開しません。

ただし、ポータブルで .NET 4.0.3 以降 (XLINQ サポートを取得するために必要) を対象とする場合は、XElement* を XmlAnyElementAttribute の代わりとして使用できます。

*ドキュメントでこれを少し明確にするために、バグを報告しました。

于 2012-09-12T17:00:21.730 に答える