Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 迭代数据集提供程序_C#_Dataset - Fatal编程技术网

C# 迭代数据集提供程序

C# 迭代数据集提供程序,c#,dataset,C#,Dataset,我有一个XML文档,如下所示: <?xml version="1.0" encoding="utf-8" ?> <Providers> <Provider> <ProviderType>Email</ProviderType> <ProviderTitle>MyProviderTitle</ProviderTitle> <DeliveryRules>

我有一个XML文档,如下所示:

<?xml version="1.0" encoding="utf-8" ?>
 <Providers>
    <Provider>
      <ProviderType>Email</ProviderType>
      <ProviderTitle>MyProviderTitle</ProviderTitle>
       <DeliveryRules>
          <PersonalDelivery>true</PersonalDelivery>
       </DeliveryRules>
      <ProviderConfiguration>
    <SendTo>
      <Address>myEmailAddress</Address>
      <Address>myEmailAddress</Address>
    </SendTo>
  </ProviderConfiguration>
</Provider>
    <Provider>
      <ProviderType>Email</ProviderType>
      <ProviderTitle>MyProviderTitle</ProviderTitle>
       <DeliveryRules>
          <PersonalDelivery>true</PersonalDelivery>
       </DeliveryRules>
      <ProviderConfiguration>
    <SendTo>
      <Address>myEmailAddress</Address>
      <Address>myEmailAddress</Address>
    </SendTo>
  </ProviderConfiguration>
</Provider>
</Providers>

如何遍历提供程序?

当涉及到更分层的数据时,最好将其反序列化为强类型对象图

foreach (var Provider in dsConfiguration.Tables["Provider"].Rows)
{
    // your code here
}
下面是一个非常快速的实现,应该适用于您的示例文档:

[XmlType("Providers")]
public class Providers : List<Provider> { }

public class Provider
{
    public string ProviderType { get; set; }
    public string ProviderTitle { get; set; }
    public DeliveryRules DeliveryRules { get; set; }
    public ProviderConfiguration ProviderConfiguration { get; set; }
}

public class DeliveryRules
{
    public bool PersonalDelivery { get; set; }
}

public class ProviderConfiguration
{
    [XmlArrayItem("Address")]
    public string[] SendTo { get; set; }
}

public static void Main()
{
    var serializer = new XmlSerializer(typeof (Providers));
    Providers providers;
    using (var stream = File.OpenRead("myfile.xml"))
    {
        providers = (Providers) serializer.Deserialize(stream);
    }
    foreach (var provider in providers)
    {
        Console.WriteLine(provider.ProviderTitle);
        foreach (var address in provider.ProviderConfiguration.SendTo)
        {
            Console.WriteLine("\t" + address);
        }
    }
}
[XmlType(“提供者”)]
公共类提供程序:列表{}
公共类提供者
{
公共字符串提供程序类型{get;set;}
公共字符串提供程序标题{get;set;}
公共DeliveryRules DeliveryRules{get;set;}
公共ProviderConfiguration ProviderConfiguration{get;set;}
}
公共类传递规则
{
公共bool PersonalDelivery{get;set;}
}
公共类提供程序配置
{
[XmlArrayItem(“地址”)]
公共字符串[]SendTo{get;set;}
}
公共静态void Main()
{
var serializer=新的XmlSerializer(typeof(Providers));
供应商;
使用(var stream=File.OpenRead(“myfile.xml”))
{
提供程序=(提供程序)序列化程序。反序列化(流);
}
foreach(提供程序中的var提供程序)
{
Console.WriteLine(provider.ProviderTitle);
foreach(provider.ProviderConfiguration.SendTo中的var地址)
{
控制台写入线(“\t”+地址);
}
}
}

显然,这种方法需要更多的管道工作,但如果您能够获得一个描述文档格式的XSD,那么您就可以使用该工具自动生成所有类。

我无法理解,我一直使用数据集来保存非常直接的非层次数据。正如您所看到的,此结构有点不同……这是否意味着我需要创建一个自定义提供程序类?您可以使用此代码访问SendTo:provider.GetChildRows(“provider\U ProviderConfiguration”)[0]。GetChildRows(“ProviderConfiguration\U SendTo”),但我同意Henk的观点,XDocument更适合。感谢我实现了这个自定义序列化,但我决定想要更动态的东西,这就是为什么我决定尝试数据集。。。在我看来,数据集根本不是这项工作的合适工具。市场上有很多关于数据集及其易用性的炒作,你经常会听到,只要将其放入数据集中序列化、反序列化即可。事实是,事情并没有那么简单!
[XmlType("Providers")]
public class Providers : List<Provider> { }

public class Provider
{
    public string ProviderType { get; set; }
    public string ProviderTitle { get; set; }
    public DeliveryRules DeliveryRules { get; set; }
    public ProviderConfiguration ProviderConfiguration { get; set; }
}

public class DeliveryRules
{
    public bool PersonalDelivery { get; set; }
}

public class ProviderConfiguration
{
    [XmlArrayItem("Address")]
    public string[] SendTo { get; set; }
}

public static void Main()
{
    var serializer = new XmlSerializer(typeof (Providers));
    Providers providers;
    using (var stream = File.OpenRead("myfile.xml"))
    {
        providers = (Providers) serializer.Deserialize(stream);
    }
    foreach (var provider in providers)
    {
        Console.WriteLine(provider.ProviderTitle);
        foreach (var address in provider.ProviderConfiguration.SendTo)
        {
            Console.WriteLine("\t" + address);
        }
    }
}