Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.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# 如何反序列化RESTAPI调用返回的XML?_C#_Xml_Serialization - Fatal编程技术网

C# 如何反序列化RESTAPI调用返回的XML?

C# 如何反序列化RESTAPI调用返回的XML?,c#,xml,serialization,C#,Xml,Serialization,我无法对RESTful API调用返回的XML进行反序列化。 这是我返回的错误消息: System.AggregateException:发生一个或多个错误。--> System.Runtime.Serialization.SerializationException:第1行出错 第106位。应为来自的元素“ArrayOfAPIUtility.PartInfo” 名称空间 ''.. 遇到名称为“Part”、命名空间为“”的“Element” 我按照答案创建了一个成功的REST连接 返回的XML如

我无法对RESTful API调用返回的XML进行反序列化。 这是我返回的错误消息:

System.AggregateException:发生一个或多个错误。--> System.Runtime.Serialization.SerializationException:第1行出错 第106位。应为来自的元素“ArrayOfAPIUtility.PartInfo” 名称空间 ''.. 遇到名称为“Part”、命名空间为“”的“Element”

我按照答案创建了一个成功的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);
        }
    }
}

12345
项目说明
190.59
0.5
我试图将其反序列化如下:

<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
{
公共字符串ItemId{get;set;}
公共字符串ItemDescription{get;set;}
公共字符串成本{get;set;}
公共字符串权重{get;set;}
}
public void GetPartInfo(字符串itemId)
{
var URL=…一些URL。。。;
client.BaseAddress=新Uri(URL);
client.DefaultRequestHeaders.Accept.Add(新的MediaTypeWithQualityHeaderValue(“应用程序/xml”);
HttpResponseMessage response=client.GetAsync(urlParameters).Result;
if(响应。IsSuccessStatusCode)
{
var dataObjects=response.Content.ReadAsAsync().Result;
foreach(数据对象中的变量d)
{
Console.WriteLine(“{0}”,d.ItemId);
}
}
}
结果是上面粘贴的错误消息

我想我遗漏了一些非常基本的东西:-)

非常感谢你的帮助

试试xml-linq

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; }
    }
}

感谢您的回复@jdweng,但我没有XML文件:-)如果您阅读代码中的注释,您可以使用Parse来读取字符串而不是文件。我怀疑这是因为您的类名“PartInfo”与标记名“Part”不匹配。我猜您要么必须对该类进行注释,这样XML序列化就会知道它必须使用标记名“Part”,要么将该类重命名为“Part”。谢谢您的回复@Fildor!如何注释该类,以便XML序列化知道它必须使用标记名“Part”?即使我将类名更改为
public class Part
,我仍然会收到与上面粘贴的相同的错误消息@费尔多