创建动态数组数组

时间:2015-11-23 08:26:36

标签: c# .net arrays xml .net-3.5

在C#中,我试图创建一个数组数组,或者可以使用XML数据将其称为锯齿状数组。但我完全糊涂了如何开始

XML示例

<?xml version="1.0" encoding="utf-8"?>
<MAIN>
  <Items>
    <Name>name1</Name>
    <Data>data1</Data>
    <Category>category1</Category>
  </Items>
  <Items>
    <Name>name2</Name>
    <Data>data2</Data>
    <Category>category2</Category>
  </Items>
  <Items>
    <Name>name3</Name>
    <Data>data3</Data>
    <Category>category2</Category>//same category as above
  </Items>
  ...
  ...
  <Items>
    <Name>name20</Name>
    <Data>data20</Data>
    <Category>category16</Category>
  </Items>
</MAIN>

现在我需要创建一个包含category1,category2,...的数组,直到类别节点上的类别,需要创建每个类别的单独数组来存储项目名称和数据,以便我可以检索它们我的用途。

从上面的示例xml我需要在单个数组中使用相同的类别项

项目和类别计数是完全动态的。 如何动态地做到这一点?

1 个答案:

答案 0 :(得分:2)

你可以用linq

来做
var categorized = xe.Descendants("Items")
    .GroupBy(x => x.Element("Category").Value)
    .Select(x => new
    {
        Category = x.Key,
        Items = x.ToList()
    }).ToList();

您会将ItemsCategory元素添加到组中。 然后,您将在组中选择CategoryItems。 它将为您返回List<{Category, List<Items>}>

这是分类结构的样子

[
  {
    "Category": "category1",
    "Items": [
      {
        "Items": {
          "Name": "name1",
          "Data": "data1",
          "Category": "category1"
        }
      }
    ]
  },
  {
    "Category": "category2",
    "Items": [
      {
        "Items": {
          "Name": "name2",
          "Data": "data2",
          "Category": "category2"
        }
      },
      {
        "Items": {
          "Name": "name3",
          "Data": "data3",
          "Category": "category2",
          "#text": "//same category as above\n  "
        }
      }
    ]
  },
  {
    "Category": "category16",
    "Items": [
      {
        "Items": {
          "Name": "name20",
          "Data": "data20",
          "Category": "category16"
        }
      }
    ]
  }
]