c# Linq到XML到对象不能在XAMARIN (ios)中工作

本文关键字:ios 工作 XAMARIN Linq XML 对象 不能 | 更新日期: 2023-09-27 18:12:52

我有一个问题,从一个webservice到xamarin (ios)的自定义类的XML结果。

我调用了一个Webservice,得到了以下结果:

<?xml version="1.0" encoding="utf-8" ?> 
<ArrayOfCO_App_Table_CO_VERTRETERFTPLOGIN xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://tempuri.org/">
<CO_App_Table_CO_VERTRETERFTPLOGIN>
    <id>2</id> 
    <PERSONAL>max.mustermann</PERSONAL> 
    <FTP>127.0.0.1</FTP> 
    <USERNAME /> 
    <PASSWORD /> 
    <DIRECTORY /> 
    <ACTIVE>1</ACTIVE> 
    <USERDOMAIN /> 
    <ZIPFILENAME>bla.zip</ZIPFILENAME> 
    <DBFILENAME>bla.db</DBFILENAME> 
</CO_App_Table_CO_VERTRETERFTPLOGIN>
</ArrayOfCO_App_Table_CO_VERTRETERFTPLOGIN>

我想把它插入到一个类中。

  public class co_vertreterftplogin
 {
public string id { get; set; }
public string INVERT { get; set; }
public string PERSONAL { get; set; }
public string FTP { get; set; }
public string USERNAME { get; set; }
public string PASSWORD { get; set; }
public string DIRECTORY { get; set; }
public string ACTIVE { get; set; }
public string USERDOMAIN { get; set; }
public string ZIPFILENAME { get; set; }
public string DBFILENAME { get; set; }
}
我代码:

var xmldoc = XDocument.Parse(result);
XElement dx = xmldoc.Elements().FirstOrDefault();
var data = (from item in dx.Elements().FirstOrDefault().Descendants()
select new Database.Tabellen.co_vertreterftplogin
{
        id =item.Element("id").Value,
        PERSONAL="",
        FTP="",
        USERNAME="",
        PASSWORD="",
        DIRECTORY="",
        ACTIVE="",
        USERDOMAIN="",
        ZIPFILENAME="",
        DBFILENAME=""
});
Database.Tabellen.co_vertreterftplogin bla = data.First ();

我的问题是data.First()总是null。或者换句话说,"我的代码不工作":-)

Thx转发

c# Linq到XML到对象不能在XAMARIN (ios)中工作

这里有几个问题。首先,我相信你对Elements/Descendants有太多的调用,所以你实际上是在迭代<CO_App_Table_CO_VERTRETERFTPLOGIN>的所有后代。其次,在获取id元素时没有指定名称空间。由于根元素中的这个属性:

xmlns="http://tempuri.org/"

其余所有元素都在该名称空间中。所以你想要:

XNamespace ns = "http://tempuri.org/";
var doc = XDocument.Parse(result);
var data = doc.Root       // ArrayOfCO_App_Table_CO_VERTRETERFTPLOGIN
              .Elements() // CO_App_Table_CO_VERTRETERFTPLOGIN
              .Select(x => new Database.Tabellen.co_vertreterftplogin
              {
                  id = (string) x.Element(ns + "id"),
                  ...
              });

我还要强烈建议您重新考虑类型和属性的命名,以遵循。net的命名约定。