我有以下XML,我只想反序列化Product1的流,C#中的语法是什么?谢谢。我在网上找不到任何文件。
<ArrayOfProductData>
- <ProductData>
<ProductName>product1</ProductName>
<ProductID>1</ProductID>
- <Streams>
<productId>1</productId>
<name>current stream</name>
<id>1</id>
</Streams>
- <Streams>
<productId>1</productId>
<name>stream 1.1</name>
<id>2</id>
</Streams>
</ProductData>
- <ProductData>
<ProductName>product2</ProductName>
<ProductID>2</ProductID>
- <Streams>
<productId>2</productId>
<name>current stream</name>
<id>1</id>
</Streams>
- <Streams>
<productId>2</productId>
<name>stream 1.2</name>
<id>2</id>
</Streams>
</ProductData>
</ArrayOfProductData>
答案 0 :(得分:3)
您可以使用XDocument和XPath过滤:
using System;
using System.Linq;
using System.Xml.Linq;
using System.Xml.XPath;
public class ProductStream
{
public int Id { get; set; }
public int ProductId { get; set; }
public string Name { get; set; }
}
class Program
{
static void Main()
{
var streams = XDocument
.Load("test.xml")
.XPathSelectElements("//ProductData[ProductID='1']/Streams")
.Select(s => new ProductStream
{
Id = int.Parse(s.Element("id").Value),
ProductId = int.Parse(s.Element("productId").Value),
Name = s.Element("name").Value
});
foreach (var stream in streams)
{
Console.WriteLine(stream.Name);
}
}
}
答案 1 :(得分:2)
我不会写你的代码。看看http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlserializer.aspx并编写一个可能符合您需求的类,并将其序列化。熟悉用于控制序列化的属性,并按照示例的方式调整类的序列化。然后你也可以用它进行反序列化。
当然还有其他选项可以从XML中读取数据,但我不会记录所有这些数据。显然你也可以使用XmlDocument,XDocument,XmlReader,......或任何符合你要求的东西“手动”阅读数据。
答案 2 :(得分:1)
答案 3 :(得分:1)
您无法真正进行选择性反序列化,但您可以在将结果反序列化为XDocument
对象之后对结果进行过滤。 EG:
using System.Xml.Linq;
XDocument myDoc = XDocument.Load("myfile.xml");
var prod1Streams = from e in XDocument.Root.Elements("Streams")
where e.Element("productId") != null
&& e.Element("productId").Value == "1"
select e;