0

以下のようにサービスを呼び出すと、TruckNameとWebサイトのXML要素はnullになりますか?明らかに、要素はWebページのXMLに組み込まれています(以下のxmlを参照)。ArrayOf要素が最初であることに関連していると思いますか?以下は、メソッドGetInfo()を呼び出すコンソールアプリのコードでもあります。ArrayOfFoodTruck要素を削除する必要がありますか?もしそうなら、最も簡単な方法は何ですか。よろしくお願いします。

- <ArrayOfFoodTruck xmlns="http://schemas.datacontract.org/2004/07/WCFServiceLibrary" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
- <FoodTruck>
 <Company i:nil="true" /> 
 <DayOfWeek i:nil="true" /> 
 <Location i:nil="true" /> 
 <TimeOfDay i:nil="true" /> 
 <TruckID>0</TruckID> 
 <TruckName>Truck 87</TruckName> 
 <Website>http://www.test.com</Website> 
 </FoodTruck>
- <FoodTruck>
<Company i:nil="true" /> 
<DayOfWeek i:nil="true" /> 
<Location i:nil="true" /> 
<TimeOfDay i:nil="true" /> 
<TruckID>0</TruckID> 
<TruckName>Bon Me</TruckName> 
<Website>http://www.test.com</Website> 
</FoodTruck>
</ArrayOfFoodTruck>

これは私のコンソールアプリからの呼び出しです。

    static void GetInfo()
    {

        XElement rootXml = XElement.Load("http://localhost:5150/getnames");

         var FoodTruck = from C in rootXml.Elements()
         select new { TruckName = (string)C.Element("TruckName"), WebSite = (string)C.Element("Website") };
         foreach (var x in FoodTruck)

         Console.WriteLine("{0}\r\n{1}", x.TruckName, x.WebSite);
         Console.ReadKey();

    }
4

1 に答える 1

1

名前空間に問題があると思います

XDocument xDoc = XDocument.Load(.....);
XNamespace ns = XNamespace.Get("http://schemas.datacontract.org/2004/07/WCFServiceLibrary");

var result = xDoc.Descendants(ns+"FoodTruck")
    .Select(n => new 
    { 
        TruckName=n.Element(ns+"TruckName").Value,
        WebSite = n.Element(ns+"Website").Value
    })
    .ToArray();

-編集- または

XmlSerializer ser = new XmlSerializer(typeof(FoodTruck[]), "http://schemas.datacontract.org/2004/07/WCFServiceLibrary");
var foodTrucks = (FoodTruck[])ser.Deserialize(new StringReader(xml));

public class FoodTruck
{
    public string Website;
    public string TruckName;
}
于 2012-05-17T18:17:13.633 に答える