C# 解析Amazon订单响应xml
我正在获取对象错误上未设置的引用。。。。 我评论了每一件事情只是为了测试它。即使对于第一个元素,也是抛出异常。 我什么都试过了。如果有人能给我指出正确的方向,我将不胜感激 FormsPersistence是一个类C# 解析Amazon订单响应xml,c#,xml,parsing,linq-to-xml,amazon,C#,Xml,Parsing,Linq To Xml,Amazon,我正在获取对象错误上未设置的引用。。。。 我评论了每一件事情只是为了测试它。即使对于第一个元素,也是抛出异常。 我什么都试过了。如果有人能给我指出正确的方向,我将不胜感激 FormsPersistence是一个类 XDocument doc = XDocument.Parse(responseXml); XNamespace ns = "https://mws.amazonservices.com/Orders/2013-09-01"; var
XDocument doc = XDocument.Parse(responseXml);
XNamespace ns = "https://mws.amazonservices.com/Orders/2013-09-01";
var data = (from attrib in doc.Descendants(ns + "Order")
select new FormsPersistence
{
AmazonOrderID = (string)attrib.Element(ns+"AmazonOrderID").Value ?? string.Empty,
//MerchantOrderID = (string)attrib.Element(ns + "MerchantOrderID").Value ?? string.Empty,
//PurchaseDate = (string)attrib.Element(ns + "PurchaseDate").Value ?? string.Empty,
//OrderStatus = (string)attrib.Element(ns + "OrderStatus").Value ?? string.Empty,
//ASIN = (string)attrib.Element(ns + "OrderItem").Element(ns + "ASIN").Value ?? string.Empty,
//SKU = (string)attrib.Element(ns + "OrderItem").Element(ns + "SKU").Value ?? string.Empty,
// ItemStatus = (string)attrib.Element(ns + "OrderItem").Element(ns + "ItemStatus").Value ?? string.Empty,
//ProductName = (string)attrib.Element(ns + "OrderItem").Element(ns + "ProductName").Value ?? string.Empty,
//Quantity = (string)attrib.Element(ns + "OrderItem").Element(ns + "Quantity").Value ?? string.Empty,
//Amount = (string)attrib.Element(ns + "OrderItem").Element(ns + "ItemPrice") == null ? string.Empty : (string)attrib.Element(ns + "OrderItem").Element(ns + "ItemPrice").Element(ns + "Component").Element(ns + "Amount").Value,
}).ToList();
我不是在检查整个财产,但首先这只是一个不同情况的问题。注意,XML节点名称区分大小写,因此
AmazonOrderID
应该是AmazonOrderID
:
class FormsPersistence
{
public string AmazonOrderID { get; set; }
public string MerchantOrderID { get; set; }
public string PurchaseDate { get; set; }
public string OrderStatus { get; set; }
public string ASIN { get; set; }
public string SKU { get; set; }
public string ItemStatus { get; set; }
public string ProductName { get; set; }
public string Quantity { get; set; }
public string Amount { get; set; }
}
因此,第一个建议是更仔细地查看代码。另一个建议是,如我在评论中所述,只需将XElement
转换为合适的值,而不是获取XElement.value
属性
更新:
好的,我已经看过整个房子了。XML示例中没有名为
MerchantOrderID
和OrderItem
的元素,因此代码中试图访问这些元素的所有行都会触发异常。与其访问Value
属性,不如简单地将XElement
转换为字符串,例如:AmazonOrderID=(string)attrib.Element(ns+“AmazonOrderID”)
。检查是否仍以这种方式获得空引用异常元素类型“Orders”必须由匹配的结束标记终止.Value属性引发错误,只是因为我无法引用该节点。通过删除Value属性,我没有得到任何返回值。@Kokkie我在复制时跳过了该标记,但它存在于我的原始响应文件中。
class FormsPersistence
{
public string AmazonOrderID { get; set; }
public string MerchantOrderID { get; set; }
public string PurchaseDate { get; set; }
public string OrderStatus { get; set; }
public string ASIN { get; set; }
public string SKU { get; set; }
public string ItemStatus { get; set; }
public string ProductName { get; set; }
public string Quantity { get; set; }
public string Amount { get; set; }
}
var data = (from attrib in doc.Descendants(ns + "Order")
select new
{
AmazonOrderID = (string)attrib.Element(ns + "AmazonOrderId"),
.....
.....
}).ToList();