2010-09-17 4 views
0
<Response SessionId="55C10AC0E63B44FCB1868FF4B49E6DF7" xmlns="http://MySample.Sample.com/Sample.xsd"> 
    <Status Success="true" Message="OK" ErrorCode="0" /> 
    <Data> 
    <List Name="My.API.Customer.Customers" Type="My.API.Customer.Customers"> 
    <Item Key="12345678-0" State="Unchanged"> 
    <Value Name="MasterCustomerId" Value="12345678" /> 
    <Value Name="SubCustomerId" Value="0" /> 
    <Value Name="IsAbstractAuthor" Value="False" /> 
    <Value Name="LastFirstName" Value="Cal, Duke" /> 
    <Value Name="IsAbstractReviewer" Value="False" /> 
    <Value Name="NamePrefix" Value="" /> 
    <Value Name="FirstName" Value="Cal" /> 
    <Value Name="MiddleName" Value="" /> 
    <Value Name="LastName" Value="Duke" /> 
    <Value Name="NameSuffix" Value="" /> 
    <Value Name="NameCredentials" Value="" /> 
    <Value Name="SearchName" Value="DUKE;CAL" /> 
    <Value Name="LabelName" Value="Cal Duke" /> 
    <Value Name="FormalSalutation" Value="Mr. Duke" /> 
    <Value Name="IsCustomerStatusActive" Value="True" /> 
    <Value Name="OrganizationId" Value="" /> 
    <Value Name="OrganizationUnitId" Value="" /> 
    <Value Name="RecordType" Value="I" /> 
    <Value Name="CanPlaceOrderFlag" Value="True" /> 
    <Value Name="CanCreateSegmentsFlag" Value="False" /> 
    <Value Name="BillPrimaryAccountFlag" Value="True" /> 
    <Value Name="Nickname" Value="" /> 
    <Value Name="InformalSalutation" Value="Cal" /> 
    <Value Name="CustomerClassCode" Value="INDIV" /> 
    <Value Name="CustomerStatusCode" Value="ACTIVE" /> 
    <Value Name="CustomerStatusDate" Value="8/9/2010 4:17:23 PM" /> 
    <Value Name="AllowFaxFlag" Value="True" /> 
    <Value Name="AllowEmailFlag" Value="True" /> 
    <Value Name="AllowPhoneFlag" Value="True" /> 
    <Value Name="AllowLabelSalesFlag" Value="True" /> 
    <Value Name="AllowSolicitationFlag" Value="True" /> 
    <Value Name="AllowInternalMailFlag" Value="True" /> 
    <Value Name="SolicitationRemovalDate" Value="12:00:00 AM" /> 
    <Value Name="TaxableFlag" Value="True" /> 
    <Value Name="FederalTaxId" Value="" /> 
    <Value Name="VATId" Value="" /> 
    <Value Name="TaxExemptId" Value="" /> 
    <Value Name="Ssn" Value="" /> 
    <Value Name="GenderCode" Value="M" /> 
    <Value Name="BirthDate" Value="12:00:00 AM" /> 
    <Value Name="EthnicityCode" Value="99" /> 
    <Value Name="AnnualIncomeRangeCode" Value="" /> 
    </Item> 
</List> 
    </Data> 
</Response> 

Si je classe C# appelé SampleUser propriétés pour FirstName, LastName etc., comment puis-je utiliser LINQ-à-Xml et obtenir le valeurs du XML à affecter aux propriétés de classe C# appropriées.requête LINQ pour obtenir la valeur de XML aux propriétés de classe aC# - LINQ to XML

+0

peut-être xmlSerializer pourrait gérer que –

Répondre

0

Les descendants de Item ayant tous le même ID rendent cela difficile pour Linq-to-XML (du point de vue du ballonnement de code), mais pas impossible.

Un court exemple pour vous aider à démarrer est ce

XDocument document = XDocument.Parse(xml); 
XNamespace ns = "http://MySample.Sample.com/Sample.xsd"; 

var sampleUsers = from item in document.Root.Element(ns + "Data").Element(ns + "List").Elements(ns + "Item") 
        select new SampleUser 
        { 
         FirstName = item.Elements(ns + "Value").First(v => v.Attribute("Name").Value.Equals("FirstName")).Attribute("Value").Value, 
         LastName = item.Elements(ns + "Value").First(v => v.Attribute("Name").Value.Equals("LastName")).Attribute("Value").Value 
        }; 

Il serait beaucoup mieux si le XML était comme

<Item> 
    <FirstName>Bob</FirstName> 
    <LastName>Smith</LastName> 
</Item> 

Peut-être que vous pouvez explorer une transformation de réellement y arriver.

+0

C'est un Linq complexe que vous avez mentionné Anthony. Merci ça fonctionne très bien! – kalls

1
XDocument doc = XDocument.Parse(xmlstring); 
var a = from b in doc.Descendants("Value") 
     select new SampleUser(){FirstName = b.Attribute("firstName").Value, 
           lastName = b.Attribute("lastName").value}; 
+0

J'ai eu une méthode qui retourne IEnumerable et a essayé votre code Vinay Il est nul pour une raison quelconque. Je vais essayer et vous tenir au courant. – kalls

0

LINQ à XML n'est pas le meilleur outil pour cela.

Si vous disposez d'un schéma XSD pour la réponse, vous pouvez utiliser l'outil XSD.exe fourni avec Visual Studio pour générer une classe pour vous. Il générera également une méthode d'usine Deserialize qui vous permettra de créer une instance de la classe à partir de données XML.

Si vous n'avez pas de XSD, vous pouvez utiliser un outil qui déduira le schéma d'un échantillon. Voici une example d'une telle application.