2017-12-27 418 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

很高興幫助,不要忘記註冊並將其標記爲已解決,如果它解決了您的目的 –