2017-03-23 4 views
0

RESTful API呼び出しから返されたXMLをデシリアライズしていません。REST API呼び出しから返されたXMLを逆シリアル化する方法は?

System.AggregateException:1つ以上のエラーが発生した これは私が戻って取得していますエラーメッセージです。 ----> System.Runtime.Serialization.SerializationException: 名前空間の名前の 「http://schemas.datacontract.org/2004/07/MyProject.Web」.. 発生しました「要素」「一部」、名前空間からの要素「ArrayOfAPIUtility.PartInfo」を期待行1 位置106でエラーが発生しました''。

私は成功したREST接続を作成するためにthis stackoverflow答えました。

返されるXMLは次のようになります。

<Part> 
    <ItemId>12345</ItemId> 
    <ItemDescription>Item Description</ItemDescription> 
    <Cost>190.59</Cost> 
    <Weight>0.5</Weight> 
</Part> 

は、私はこのようにそれをデシリアライズするためにしようとしています:

public class PartInfo 
{ 
    public string ItemId { get; set; } 
    public string ItemDescription { get; set; } 
    public string Cost { get; set; } 
    public string Weight { get; set; } 
} 

public void GetPartInfo(string itemId) 
{ 
    var URL = ...some URL...; 
    client.BaseAddress = new Uri(URL); 

    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/xml")); 

    HttpResponseMessage response = client.GetAsync(urlParameters).Result; 
    if (response.IsSuccessStatusCode) 
    { 
     var dataObjects = response.Content.ReadAsAsync<IEnumerable<PartInfo>>().Result; 
     foreach (var d in dataObjects) 
     { 
      Console.WriteLine("{0}", d.ItemId); 
     } 
    } 
} 

結果は、上記の貼り付けられたエラーメッセージです。私は

:-)ここでは非常に基本的な何かが足りないと思う

はあなたの助けのためにありがとうございました!

+1

のXML LINQをお試しください。私はクラスの注釈を付けなければならないと思うので、XMLのシリアライゼーションではTagNameの "Part"が必要であるか、クラスの名前を "Part"に変更する必要があることがわかります。 – Fildor

+0

あなたの返事ありがとう@Fildor!どのようにしてクラスに注釈を付けると、XMLシリアライゼーションはTagNameの "Part"を期待しなければならないのでしょうか? – jrn

+0

クラス名を 'public class Part'に変更しても、私はまだ上に貼り付けられたのと同じエラーメッセージを受け取ります。 @Fildor – jrn

答えて

0

は、私はあなたのクラス名 "PARTINFOは" タグ名 "パート" に一致しないため、それは疑う

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Xml; 
using System.Xml.Linq; 

namespace ConsoleApplication48 
{ 
    class Program 
    { 
     const string FILENAME = @"c:\temp\test.xml"; 
     static void Main(string[] args) 
     { 
      XDocument doc = XDocument.Load(FILENAME); //use parse instead if input is a string 
      PartInfo partInfo = doc.Elements("Part").Select(x => new PartInfo() 
      { 
       ItemId = (string)x.Element("ItemId"), 
       ItemDescription = (string)x.Element("ItemDescription"), 
       Cost = (decimal)x.Element("Cost"), 
       Weight = (double)x.Element("Weight") 
      }).FirstOrDefault(); 

     } 
    } 
    public class PartInfo 
    { 
     public string ItemId { get; set; } 
     public string ItemDescription { get; set; } 
     public decimal Cost { get; set; } 
     public double Weight { get; set; } 
    } 
} 
+0

返信いただきありがとうございます@jdweng、私はXMLファイルを持っていません:-) – jrn

+0

コード内のコメントを読む場合、ファイルの代わりに文字列を読むためにParseを使用することができます。 – jdweng

関連する問題