XML到JSON到Dynamic对象,获取元素属性

时间:2016-01-25 11:28:38

标签: json xml serialization dynamic

我已经传递了一些xml:

<response>
  <SessionId>aaaaaaaaa</SessionId>
  <EventType>ProductList</EventType>
  <data>
    <Provider Name="Some Provider Name Here">
    <Id>166</Id>
    </Provider>
  </data>
</response>
然后我将其转换为动态对象:

dynamic responseObj = JsonConvert.DeserializeObject<dynamic>(JsonConvert.SerializeXNode(XDocument.Parse(response)));

之后我最终得到了这个动态对象:

{[response, {
  "SessionId": "aaaaaaaaa",
  "EventType": "ProductList",
  "data": {
    "Provider": [
      {
        "@Name": "Some Provider Name Here",
        "Id": "166",
        ...

我现在可以使用以下foreach循环来访问属性:

foreach (var provider in responseObj.response.data.Provider)
{
    Console.WriteLine(provider.Id);
}

一切正常。

我的问题:如何在循环中访问@Name属性?导致使用:provider.Name产生null,而provider.@Name不起作用

1 个答案:

答案 0 :(得分:2)

您可以使用

provider["@Name"] 

我认为XPath可以更方便地做同样的事情。

XmlDocument doc = new XmlDocument();
doc.LoadXml(s);
var nodes = doc.SelectNodes("//response/data/Provider/@Name");