C# 在C中解析xml数据和处理自定义数组元素值的最优雅的方法#

C# 在C中解析xml数据和处理自定义数组元素值的最优雅的方法#,c#,.net,xml,parsing,xmlserializer,C#,.net,Xml,Parsing,Xmlserializer,解析xml的最佳方法是什么,例如: <?xml version=""1.0"" encoding=""utf-8"" ?> <shapeTemplate> <vertex_contours> <vertex_contour> <data>1 2 3 4 5 ... </data> </vertex

解析xml的最佳方法是什么,例如:

<?xml version=""1.0"" encoding=""utf-8"" ?>
      <shapeTemplate>
          <vertex_contours>
              <vertex_contour>
                  <data>1 2 3 4 5 ... </data>
              </vertex_contour>
              ...
          </vertex_contours>

      </shapeTemplate>
但后来我意识到XmlSerializer不能仅仅解析并转换为IEnumerable

所以我想知道建议的处理这种情况的方法是什么。最初我使用的是XElement.Parse(…),但我希望有一个比这更优雅的解决方案。

使用xml linq:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            XDocument doc = XDocument.Load(FILENAME);

            string values = (string)doc.Descendants("data").FirstOrDefault();

        }
    }

}

虽然
XmlSerializer
确实不能从
IEnumerable
序列化/反序列化,但您可以实现
IXmlSerializable
-接口self并读取/写入数据。请参阅以了解更多详细信息。确实,IXmlSerializable实现了我想要的功能,现在唯一的问题是这种方法比使用Linq to Xml更好还是更差……获取数组项很复杂,因为Xml中没有每个项的标记。因此,您需要自己解析它。你能为每个项目添加标记吗?不,因为实际上数组有1000个值。这是我最初做的,但我不喜欢我自己需要实例化和初始化相关类。我想我可以使用XmlSerializer来为我完成大部分工作…您没有指定需要什么标记。虽然这段代码可能会回答这个问题,但提供有关这段代码为什么和/或如何回答这个问题的附加上下文可以提高其长期价值。但它没有回答这个问题?我说过我已经有了一个linq到xml的解决方案……是的。你没说你有linq解决方案。您要求一个比序列化更优雅的解决方案,我提供给您。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            XDocument doc = XDocument.Load(FILENAME);

            string values = (string)doc.Descendants("data").FirstOrDefault();

        }
    }

}