如何创建 class 并反序列化从第三方 Web Api 返回的 xml 响应?
How to create class and deserialize the returned xml response from thirdParty webApi?
我收到来自第三方 webApi 的以下响应 xml。我想从 Xml 获取订单 ID 并保存到我的数据库中,我需要其他标签(如消息错误)显示给用户。所以我想反序列化下面给出的响应xml。因为我是新来的。请您帮我反序列化以下响应。由于我不清楚如何为反序列化创建 Class。提前致谢。
<?xml version="1.0" encoding="utf-8"?>
<OrderResult xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Status>Success</Status>
<OrderID>159E6B2AE35244DB984384DBD7DC</OrderID>
<Errors>
<Error>
<Code>1000</Code>
<Message> StopType not valid. Submitted TripSheet data has been ignored.</Message>
<Severity>Unknown</Severity>
</Error>
<Error>
<Code>1000</Code>
<Message> StopType not valid. Submitted TripSheet data has been ignored.</Message>
<Severity>Unknown</Severity>
</Error>
</Errors>
</OrderResult>
我假设您已经将 XML 作为来自服务的 Stream,因此请忽略我获取 Stream 的代码,但这里有一个控制台应用程序来演示。我通过将 xml 复制到剪贴板并使用编辑 > 选择性粘贴 > 粘贴 XML 粘贴到 Visual Studio 来生成 OrderResult
和 OrderResultError
类作为 类
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;
using System.Xml.Serialization;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string xml = @"<?xml version=""1.0"" encoding=""utf-8""?>
<OrderResult xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"">
<Status>Success</Status>
<OrderID>159E6B2AE35244DB984384DBD7DC</OrderID>
<Errors>
<Error>
<Code>1000</Code>
<Message> StopType not valid. Submitted TripSheet data has been ignored.</Message>
<Severity>Unknown</Severity>
</Error>
<Error>
<Code>1000</Code>
<Message> StopType not valid. Submitted TripSheet data has been ignored.</Message>
<Severity>Unknown</Severity>
</Error>
</Errors>
</OrderResult>";
XDocument doc = XDocument.Parse(xml);
MemoryStream ms = new MemoryStream();
doc.Save(ms);
ms.Position = 0;
XmlSerializer ser = new XmlSerializer(typeof(OrderResult));
var orderresult = ser.Deserialize(ms) as OrderResult;
Console.WriteLine(orderresult.OrderID);
}
}
/// <remarks/>
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)]
public partial class OrderResult
{
private string statusField;
private string orderIDField;
private OrderResultError[] errorsField;
/// <remarks/>
public string Status
{
get
{
return this.statusField;
}
set
{
this.statusField = value;
}
}
/// <remarks/>
public string OrderID
{
get
{
return this.orderIDField;
}
set
{
this.orderIDField = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlArrayItemAttribute("Error", IsNullable = false)]
public OrderResultError[] Errors
{
get
{
return this.errorsField;
}
set
{
this.errorsField = value;
}
}
}
/// <remarks/>
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public partial class OrderResultError
{
private ushort codeField;
private string messageField;
private string severityField;
/// <remarks/>
public ushort Code
{
get
{
return this.codeField;
}
set
{
this.codeField = value;
}
}
/// <remarks/>
public string Message
{
get
{
return this.messageField;
}
set
{
this.messageField = value;
}
}
/// <remarks/>
public string Severity
{
get
{
return this.severityField;
}
set
{
this.severityField = value;
}
}
}
}
我收到来自第三方 webApi 的以下响应 xml。我想从 Xml 获取订单 ID 并保存到我的数据库中,我需要其他标签(如消息错误)显示给用户。所以我想反序列化下面给出的响应xml。因为我是新来的。请您帮我反序列化以下响应。由于我不清楚如何为反序列化创建 Class。提前致谢。
<?xml version="1.0" encoding="utf-8"?>
<OrderResult xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Status>Success</Status>
<OrderID>159E6B2AE35244DB984384DBD7DC</OrderID>
<Errors>
<Error>
<Code>1000</Code>
<Message> StopType not valid. Submitted TripSheet data has been ignored.</Message>
<Severity>Unknown</Severity>
</Error>
<Error>
<Code>1000</Code>
<Message> StopType not valid. Submitted TripSheet data has been ignored.</Message>
<Severity>Unknown</Severity>
</Error>
</Errors>
</OrderResult>
我假设您已经将 XML 作为来自服务的 Stream,因此请忽略我获取 Stream 的代码,但这里有一个控制台应用程序来演示。我通过将 xml 复制到剪贴板并使用编辑 > 选择性粘贴 > 粘贴 XML 粘贴到 Visual Studio 来生成 OrderResult
和 OrderResultError
类作为 类
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;
using System.Xml.Serialization;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string xml = @"<?xml version=""1.0"" encoding=""utf-8""?>
<OrderResult xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"">
<Status>Success</Status>
<OrderID>159E6B2AE35244DB984384DBD7DC</OrderID>
<Errors>
<Error>
<Code>1000</Code>
<Message> StopType not valid. Submitted TripSheet data has been ignored.</Message>
<Severity>Unknown</Severity>
</Error>
<Error>
<Code>1000</Code>
<Message> StopType not valid. Submitted TripSheet data has been ignored.</Message>
<Severity>Unknown</Severity>
</Error>
</Errors>
</OrderResult>";
XDocument doc = XDocument.Parse(xml);
MemoryStream ms = new MemoryStream();
doc.Save(ms);
ms.Position = 0;
XmlSerializer ser = new XmlSerializer(typeof(OrderResult));
var orderresult = ser.Deserialize(ms) as OrderResult;
Console.WriteLine(orderresult.OrderID);
}
}
/// <remarks/>
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)]
public partial class OrderResult
{
private string statusField;
private string orderIDField;
private OrderResultError[] errorsField;
/// <remarks/>
public string Status
{
get
{
return this.statusField;
}
set
{
this.statusField = value;
}
}
/// <remarks/>
public string OrderID
{
get
{
return this.orderIDField;
}
set
{
this.orderIDField = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlArrayItemAttribute("Error", IsNullable = false)]
public OrderResultError[] Errors
{
get
{
return this.errorsField;
}
set
{
this.errorsField = value;
}
}
}
/// <remarks/>
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public partial class OrderResultError
{
private ushort codeField;
private string messageField;
private string severityField;
/// <remarks/>
public ushort Code
{
get
{
return this.codeField;
}
set
{
this.codeField = value;
}
}
/// <remarks/>
public string Message
{
get
{
return this.messageField;
}
set
{
this.messageField = value;
}
}
/// <remarks/>
public string Severity
{
get
{
return this.severityField;
}
set
{
this.severityField = value;
}
}
}
}