0

サードパーティの REST API と統合しようとしています。この API は常に、そのすべてのリソースをタイプ Asset として返し、そのプロパティをタイプ Attribute として返します。属性ノードの属性を使用して、プロパティ名を提供します。xml は次のようになります。

<Assets>
    <Asset>
        <Attribute name="AssetType">Story</Attribute>
        <Attribute name="OwnerName">Fred Blogs</Attribute>
        <Attribute name="Name">The Lord of the Rings</Attribute>
        ...
    </Asset>
    ...
</Assets>

DataContractSerializer (またはおそらく XmlSerializer?) を使用して、これを Story 型の poco のリストに変換したいと思います。

[DataContract(Name="Asset")]
    public class Story
    {
        public string OwnerName { get; set; }
        public string Name { get; set; }
    }

DataMember 属性は、私が知る限り、ノード属性の値ではなく、ノードの名前で機能します。これを回避する方法はありますか?

私はWebAPIクライアントがそのように読んで終わりたいと思っています..

    var client = new HttpClient();
    var result = client.GetAsync(uri).Result;
    var stories = r.Content.ReadAsAsync<List<Story>>().Result;
4

2 に答える 2

1

Linq2Xml で解析してみてはどうでしょうか。

XDocument xDoc = XDocument.Parse(xml);
var assets = xDoc.Descendants("Asset")
                    .Select(a=>a.Descendants("Attribute")
                                .ToDictionary(x => x.Attribute("name").Value, 
                                              x => x.Value))
                    .ToList();
于 2012-09-10T15:42:32.847 に答える
1

これを実現するには、カスタム シリアライザーを作成する必要があります。ここで詳細情報を参照してください:

http://msdn.microsoft.com/en-us/library/ty01x675(v=vs.80).aspx

于 2012-09-10T15:43:01.973 に答える