【发布时间】:2017-03-23 16:23:15
【问题描述】:
我被 RESTful API 调用反序列化返回的 XML 卡住了。 这是我收到的错误消息:
System.AggregateException :发生一个或多个错误。 ----> System.Runtime.Serialization.SerializationException:第 1 行出错 位置 106. 期望元素 'ArrayOfAPIUtility.PartInfo' 来自 命名空间 'http://schemas.datacontract.org/2004/07/MyProject.Web'.. 遇到名为“Part”、命名空间“”的“元素”。
我按照this stackoverflow 的回答创建了一个成功的 REST 连接。
返回的 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);
}
}
}
结果就是上面粘贴的错误信息。
我想我在这里遗漏了一些非常基本的东西:-)
非常感谢您的帮助!
【问题讨论】:
-
我怀疑这是因为您的类名“PartInfo”与标记名“Part”不匹配。我猜你要么必须注释类,所以 XML-Serialization 会知道它必须期待 TagName“Part”,或者你将类重命名为“Part”。
-
感谢您的回复@Fildor!我将如何注释该类,以便 XML-Serialization 知道它必须期待 TagName“Part”?
-
即使我将类名更改为
public class Part,我仍然会收到与上面粘贴相同的错误消息。 @Fildor
标签: c# xml serialization