Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.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# 尝试使用XDocument和LINQ_C#_.net_Xml_Linq To Xml - Fatal编程技术网

C# 尝试使用XDocument和LINQ

C# 尝试使用XDocument和LINQ,c#,.net,xml,linq-to-xml,C#,.net,Xml,Linq To Xml,我仍在学习如何使用LINQ,现在我正在与这种情况作斗争 我有这个XML文件(示例) 0 0 0 0 63596143450994.227 63596143450.994225 CFE 20 0 0 0 CFE 埃斯特兰杰罗奶油冻 0 0 0 0 63596143450994.227 63596143450.994225 CFE 20 0 13 123 CFE 万维网 现在我要做的是获取“PrxComissao”中的所有XML元素,然后将它们分配给我的类。这就是我正在尝试的代码 XDocume

我仍在学习如何使用LINQ,现在我正在与这种情况作斗争

我有这个XML文件(示例)


0
0
0
0
63596143450994.227
63596143450.994225
CFE
20
0
0
0
CFE
埃斯特兰杰罗奶油冻
0
0
0
0
63596143450994.227
63596143450.994225
CFE
20
0
13
123
CFE
万维网
现在我要做的是获取“PrxComissao”中的所有XML元素,然后将它们分配给我的类。这就是我正在尝试的代码

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;
XDocument xDoc=XDocument.Parse(resultado);
列出lstPrxComissao=xDoc.Elements(“结果”)
.要素(“PrxComissao”)
.要素()
.Select(BL_CartaoCredito.Utils.Data.Converter.FromXElement)
.ToList();
ObjAuxResult=lstPrxComissao;
我试图使用这个
转换器。FromXElement
获取所有元素并分配它们

这是我的班级

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
{
公共字符串CodComissao{get;set;}
公共字符串Montante{get;set;}
公共字符串百分比管理{get;set;}
公共字符串MntMin{get;set;}
公共字符串MntMax{get;set;}
公共字符串Nome{get;set;}
公共字符串描述符{get;set;}
公共字符串TipoImposto{get;set;}
公共字符串ComFinanciamento{get;set;}
公共字符串iActivo{get;set;}
公共字符串UtlModificacao{get;set;}
公共字符串DtModificacao{get;set;}
公共字符串UtlCriacao{get;set;}
公共字符串dtcriaco{get;set;}
}
公共静态T FromXElement(XElement元素),其中T:class,new()
{
T值=新的T();
foreach(element.Elements()中的var子元素)
{
var field=typeof(T).GetField(subElement.Name.LocalName);
field.SetValue(值,(字符串)子元素);
}
返回值;
}

现在我有两个问题。首先,我无法访问
PrxComissao
中的元素总是不返回任何内容,然后我的LINQ Select是否正确?还是有更好的办法

子体开始
假设转换器接受一个元素:

List<PrxComissao> lstPrxComissao = xDoc.Descendants()
                                       .Elements("PrxComissao")
                                       .Select(el => BL_CartaoCredito.Utils.Data.Converter.FromXElement<PrxComissao>(el))
                                       .ToList();
List lstPrxComissao=xDoc.subjections()
.要素(“PrxComissao”)
.Select(el=>BL_CartaoCredito.Utils.Data.Converter.FromXElement(el))
.ToList();
然后(未经测试)

公共静态T FromXElement(XElement元素),其中T:class,new()
{
var typeOfT=typeof(T);
T值=新的T();
foreach(element.Elements()中的var子元素)
{
var prop=typeOfT.GetProperty(subElement.Name.LocalName);
如果(prop!=null)
{
属性设置值(值,子元素值);
}
}
返回值;
}

当前,您的代码将
的各个子元素传递给转换器方法。我相信您希望传递引用
XElement

List<PrxComissao> lstPrxComissao = 
                    xDoc.Elements("Results")
                        .Elements("PrxComissao")
                        .Select(o => BL_CartaoCredito.Utils
                                                     .Data
                                                     .Converter
                                                     .FromXElement<PrxComissao>(o)
                        )
                        .ToList();
列表lstPrxComissao=
xDoc.要素(“结果”)
.要素(“PrxComissao”)
.选择(o=>BL_CartaoCredito.Utils
.数据
.转换器
.FromXElement(o)
)
.ToList();

此外,您的类使用属性而不是字段,因此这里应该使用的对应反射方法是
GetProperty()
,而不是
GetField()

如果您需要有关
FromXElement()
方法的代码的帮助,那么您需要向我们展示该方法…我的错误,在任何事情之前已经发布了,谢谢你的时间,确实,已经发布了。但是你的答案仍然是return count=0,我找不到任何元素guess@user3584562,当我在LInqPad中使用您的xml和我的代码时,我得到了元素。@user3584562,har07是对的,相应地编辑了我的。
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;
 }
List<PrxComissao> lstPrxComissao = 
                    xDoc.Elements("Results")
                        .Elements("PrxComissao")
                        .Select(o => BL_CartaoCredito.Utils
                                                     .Data
                                                     .Converter
                                                     .FromXElement<PrxComissao>(o)
                        )
                        .ToList();