0

我正在尝试与第 3 方 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 类型的 pocos 列表。

[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 回答