2016-04-13 6 views
1

私はまだLINQの使い方を学んでいますが、今この状況に苦しんでいます。XDocumentとLINQを使用しようとしています

私は、このXMLファイル(例)

<Results> 
    <PrxComissao> 
    <Id>0</Id> 
    <NumErro>0</NumErro> 
    <RetCode>0</RetCode> 
    <IdEvento>0</IdEvento> 
    <ExecutionTimeMilliseconds>63596143450994.227</ExecutionTimeMilliseconds> 
    <ExecutionTimeSeconds>63596143450.994225</ExecutionTimeSeconds> 
    <CodComissao>CFE</CodComissao> 
    <Montante>20.00</Montante> 
    <Percentagem>0.0000</Percentagem> 
    <MntMin>0.00</MntMin> 
    <MntMax>0.00</MntMax> 
    <Nome>CFE</Nome> 
    <Descricao>Custo Factura Estrangeiro</Descricao> 
    </PrxComissao> 
    <PrxComissao> 
    <Id>0</Id> 
    <NumErro>0</NumErro> 
    <RetCode>0</RetCode> 
    <IdEvento>0</IdEvento> 
    <ExecutionTimeMilliseconds>63596143450994.227</ExecutionTimeMilliseconds> 
    <ExecutionTimeSeconds>63596143450.994225</ExecutionTimeSeconds> 
    <CodComissao>CFE</CodComissao> 
    <Montante>20.00</Montante> 
    <Percentagem>0.0000</Percentagem> 
    <MntMin>13.00</MntMin> 
    <MntMax>123.00</MntMax> 
    <Nome>CFE</Nome> 
    <Descricao>www</Descricao> 
    </PrxComissao> 
</Results> 

を持っているそして今、私が何をしたいか「PrxComissao」内のすべてのXML要素を取得し、その後、私のクラスに割り当てています。これは私が私がこのConverter.FromXElement<PrxComissao>をどうしようとしています何

XDocument xDoc = XDocument.Parse(resultado); 

List<PrxComissao> lstPrxComissao = xDoc.Elements("Results") 
             .Elements("PrxComissao") 
             .Elements() 
             .Select(BL_CartaoCredito.Utils.Data.Converter.FromXElement<PrxComissao>) 
             .ToList(); 

ObjAuxResult = lstPrxComissao; 

をしようとしていたコードはすべてその要素を取得し、それらを割り当てることです。

はここだから今私は2つの問題を抱えている私のクラス

public class PrxComissao 
{ 

    public string CodComissao { get; set; } 
    public string Montante { get; set; } 
    public string Percentagem { get; set; } 
    public string MntMin { get; set; } 
    public string MntMax { get; set; } 
    public string Nome { get; set; } 
    public string Descricao { get; set; } 
    public string TipoImposto { get; set; } 
    public string ComFinanciamento { get; set; } 
    public string iActivo { get; set; } 
    public string UtlModificacao { get; set; } 
    public string DtModificacao { get; set; } 
    public string UtlCriacao { get; set; } 
    public string DtCriacao { get; set; } 
} 

public static T FromXElement<T>(XElement element) where T : class, new() 
{ 

    T value = new T(); 

    foreach (var subElement in element.Elements()) 
    { 

     var field = typeof(T).GetField(subElement.Name.LocalName); 
     field.SetValue(value, (string)subElement); 
    } 

    return value; 
} 

です。まず、私は内部の要素に到達することができませんPrxComissaoは常に私に何も返しませんし、私のLINQは正しいですか?それとも良い方法がありますか?あなたのコードは、コンバータに<PrxComissao>の個々の子要素を渡し、現在、そして

List<PrxComissao> lstPrxComissao = xDoc.Descendants() 
             .Elements("PrxComissao") 
             .Select(el => BL_CartaoCredito.Utils.Data.Converter.FromXElement<PrxComissao>(el)) 
             .ToList(); 

と(未テスト)...

public static T FromXElement<T>(XElement element) where T : class, new() 
{ 
    var typeOfT = typeof(T); 
    T value = new T(); 
    foreach (var subElement in element.Elements()) 
    { 
     var prop = typeOfT.GetProperty(subElement.Name.LocalName); 
     if(prop != null) 
     { 
      prop.SetValue(value, subElement.Value); 
     } 
    } 
     return value; 
} 
+0

「FromXElement ()」メソッドのコードについて助けが必要な場合は、そのメソッドを表示する必要があります。 – har07

+0

私の間違いは、すでに投稿されました – user3584562

答えて

1

スタートDescendantsがあなたのコンバータを想定してXElementオブジェクトを取ります方法。私はあなたの代わりに<PrxComissao>を参照XElementを渡したいと考えている:

List<PrxComissao> lstPrxComissao = 
        xDoc.Elements("Results") 
         .Elements("PrxComissao") 
         .Select(o => BL_CartaoCredito.Utils 
                .Data 
                .Converter 
                .FromXElement<PrxComissao>(o) 
         ) 
         .ToList(); 

はまた、あなたのクラスではなく、フィールドのプロパティを使用していますので、ここで使用されることになって対応する反射法はGetProperty()、ないGetField()です。

+0

あなたの時間をありがとうございました。投稿しました。しかし、あなたの答えでは、まだcounts = 0の戻り値はありません。私が推測する要素はどれも – user3584562

+0

@ user3584562です。編集を参照してください。 – Crowcoder

+0

@ user3584562、私はLInqPadであなたのXMLと私のコードを使用するとき、私は要素を取得します。 – Crowcoder

関連する問題