2017-12-27 138 views
1

我想从某些情况下反序列化xml列表中获取数据。但我没有得到任何适当的解决方案。下面是我的代码片段:如何在c中获取条件反序列化xml列表#

public List<LinkInfo> GetLinks(string entityType, string relatedEntityType, string linkType) 
    { 
     try 
     { 
      XmlSerializer deserializer = new XmlSerializer(typeof(Project)); 
      TextReader reader = new StreamReader(@"E:\\SampleMetaData.xml"); 
      object obj = deserializer.Deserialize(reader); 

      Project xmlData = (Project)obj; 
      return xmlData.Module.Links.Link.Select(field => new LinkInfo 
      { 
       EntityId = field.EntityId, 
       EntityType = field.EntityType, 
       RelatedEntityId = field.RelatedEntityId, 
       RelatedEntityType = field.RelatedEntityType, 
       LinkType = field.LinkType 
      }).ToList();    
     } 
     catch(Exception ex) 
     { 
      Console.WriteLine("Error in",ex); 
      throw; 
     } 

    } 

下面是我的XML文件格式:

<Links> 
     <Link EntityId="5" EntityType="Doors_Module1" RelatedEntityId="7" RelatedEntityType="Doors_Module2" LinkType="InLink"/> 
     <Link EntityId="6" EntityType="Doors_Module1" RelatedEntityId="8" RelatedEntityType="Doors_Module2" LinkType="InLink"/> 
     <Link EntityId="7" EntityType="Doors_Module1" RelatedEntityId="9" RelatedEntityType="Doors_Module2" LinkType="External"/> 
    </Links> 

我要像where LinkType="Inlink" EntityType="Doors_Module1" and RelatedEntityType="Doors_Module2"

我怎样才能做到这一点去取? 感谢高级。

+0

我想你是使用XML序列化类工作的权利? 在这种情况下,你可以简单地使用'.Where(x => x.LinkType =='Doors_Module1')' –

+0

你能分享LinkInfo类吗? –

+0

动态对象,你可以使用foreach或for循环'obj。[i] .LinkType'种类关 –

回答

1
return xmlData.Module.Links.Link 
.Where(x=>.LinkType == 'Inlink' && x.EntityType == 'Doors_Module1') 
.Select(field => new LinkInfo 
     { 
      EntityId = field.EntityId, 
      EntityType = field.EntityType, 
      RelatedEntityId = field.RelatedEntityId, 
      RelatedEntityType = field.RelatedEntityType, 
      LinkType = field.LinkType 
     }).ToList();  

此代码应该为你

+1

谢谢@Arijit Mukherjee,它正如我想要的那样工作....再次感谢您... –

+1

很高兴帮助,不要忘记注册并将其标记为已解决,如果它解决了您的目的 –