【发布时间】:2014-07-31 12:04:56
【问题描述】:
<ListOrdersResponse xmlns="https://mws.amazonservices.com/Orders/2013-09-01">
<ListOrdersResult>
<NextToken>xxxxxxxx</NextToken>
<CreatedBefore>07/31/2014 15:35:36</CreatedBefore>
<Orders>
<Order>
<AmazonOrderId>xxxxxx</AmazonOrderId>
<SellerOrderId>xxxxxx</SellerOrderId>
<PurchaseDate>07/21/2014 11:11:21</PurchaseDate>
<LastUpdateDate>07/21/2014 21:41:23</LastUpdateDate>
<OrderStatus>Shipped</OrderStatus>
<FulfillmentChannel>AFN</FulfillmentChannel>
<SalesChannel>Amazon.in</SalesChannel>
<ShipServiceLevel>Standard</ShipServiceLevel>
<ShippingAddress>
<Name>xxxx</Name>
<AddressLine1>xxxx</AddressLine1>
<AddressLine2>xxxxx</AddressLine2>
<City>xxxx</City>
<StateOrRegion>xxx</StateOrRegion>
<PostalCode>xxx</PostalCode>
<CountryCode>IN</CountryCode>
<Phone>xxxxxx</Phone>
</ShippingAddress>
<OrderTotal>
<CurrencyCode>INR</CurrencyCode>
<Amount>355.00</Amount>
</OrderTotal>
<NumberOfItemsShipped>1</NumberOfItemsShipped>
<NumberOfItemsUnshipped>0</NumberOfItemsUnshipped>
<PaymentExecutionDetail />
<PaymentMethod>Other</PaymentMethod>
<MarketplaceId>xxxxx</MarketplaceId>
<BuyerEmail>xxxxx</BuyerEmail>
<BuyerName>xxxxx</BuyerName>
<ShipmentServiceLevelCategory>Standard</ShipmentServiceLevelCategory>
<OrderType>StandardOrder</OrderType>
<EarliestShipDate>07/21/2014 21:23:06</EarliestShipDate>
<LatestShipDate>07/21/2014 21:23:06</LatestShipDate>
</Order>
</ListOrdersResult>
<ResponseMetadata>
<RequestId>16a8a438-f774-4b17-824f-951a4cde7ddc</RequestId>
</ResponseMetadata>
</ListOrdersResponse>
我正在尝试解析上述响应。
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();
我收到未在对象错误上设置的引用.... 我评论了每一件事,只是为了测试它。即使是第一个元素,它也会抛出异常。 我已经尝试了一切。如果有人能指出我正确的方向,我将不胜感激。
FormsPersistence 是一个类
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; }
}
【问题讨论】:
-
与其访问
Value属性,不如简单地将XElement转换为字符串更安全,例如:AmazonOrderID = (string)attrib.Element(ns+"AmazonOrderID")。检查您是否仍然以这种方式获得空引用异常 -
元素类型“Orders”必须以匹配的结束标签“”结束。
-
Value 属性抛出错误只是因为我无法引用节点。通过删除 value 属性我没有得到返回值。
-
@Kokkie 我在复制时跳过了该标签,但它在我的原始响应文件中。
标签: c# xml parsing linq-to-xml amazon