2014-12-22 103 views
0

我在写一个方法从.xml文件反序列化为对象。我有在XML文件中的内部异常无效的字符串格式字符串从在(7,6)解析为datetime:无法反序列化为字符串

<?xml version="1.0" encoding="utf-8"?> 
<Order xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
<Table>1</Table> 
<OrderInfo> 
    <OrderID>0</OrderID> 
    <OrderType>AtStore</OrderType> 
    <Time>22/12/2014 21:07:44</Time> 
    <RentStatus>Finish</RentStatus> 
    <CancelReason>-</CancelReason> 
    <Cashier>test14</Cashier> 
    <Session>1</Session> 
</OrderInfo> 
<CustomerInfo /> 
<OrderPayment> 
    <PaymentType>Cash</PaymentType> 
    <Total>258</Total> 
    <DiscountPercent>0</DiscountPercent> 
    <Discount>0</Discount> 
    <Payment>258</Payment> 
    <PaymentFromCash>258</PaymentFromCash> 
    <PaymentFromWallet>0</PaymentFromWallet> 
    <Receive>258</Receive> 
    <Exchange>0</Exchange> 
</OrderPayment> 
<OrderDetails> 
    <OrderDetail> 
     <ProductID>107</ProductID> 
     <Code>5</Code> 
     <ProductName>abc</ProductName> 
     <Quantity>1</Quantity> 
     <Price>258</Price> 
     <DiscountPercent>0</DiscountPercent> 
     <Discount>0</Discount> 
     <Total>258</Total> 
     <Payment>258</Payment> 
     <Note /> 
    </OrderDetail> 
</OrderDetails> 

然而,有一个在我的课没有日期时间字段:

public class Order 
{ 
    public OrderInfo OrderInfo { get; set; } 
    public OrderPayment OrderPayment { get; set; } 
    public CustomerInfo CustomerInfo { get; set; } 
    public List<OrderDetail> OrderDetails { get; set; } 
} 
public class OrderInfo 
{ 
    public string OrderID { get; set; } 
    public string OrderOnlineID { get; set; } 
    public int OrderType { get; set; } 
    public string Time { get; set; } 
    public string Note { get; set; } 
    public int RentStatus { get; set; } 
    public string Cashier { get; set; } 
    public string Session { get; set; } 
    public string CancelReason { get; set; } 
} 
public class OrderPayment 
{ 
    public int PaymentType { get; set; } 
    public int Total { get; set; } 
    public int DiscountPercent { get; set; } 
    public int Discount { get; set; } 
    public int Payment { get; set; } 
    public int PaymentFromCash { get; set; } 
    public int PaymentFromWallet { get; set; } 
    public int Receive { get; set; } 
    public int Exchange { get; set; } 
} 
public class OrderDetail 
{ 
    public int ProductID { get; set; } 
    public string Code { get; set; } 
    public string ProductName { get; set; } 
    public int Quantity { get; set; } 
    public int Price { get; set; } 
    public int DiscountPercent { get; set; } 
    public int Total { get; set; } 
    public int Discount { get; set; } 
    public int Payment { get; set; } 

    public OrderDetail() 
    { 
     DiscountPercent = 0; 
     Total = 0; 
     Discount = 0; 
     Payment = 0; 
    } 
} 
public class CustomerInfo 
{ 
    public string CustomerName { get; set; } 
    public string Address { get; set; } 
    public string PhoneNumber { get; set; } 
    public string Email { get; set; } 
} 

这里是我的代码为反序列化:

var serializer = new XmlSerializer(typeof(Order)); 
Order order; 
using (TextReader reader = new StreamReader(filePath)) 
{ 
     order = (Order)serializer.Deserialize(reader); //the exception appears here 
} 

序列化的时候,我还使用一个字符串,不是日期时间。所以我认为这只是将字符串序列化为xml,并将其从xml反序列化为字符串。我不明白为什么发生异常......

+0

什么是你的'Thread.CurrentThread.CurrentCulture'值? – haim770

+0

无效的字符串格式在xml文件中从字符串解析到日期时间(7,6)。这是什么DateTime – mybirthname

+0

如果你得到错误'异常,无效的字符串格式解析从字符串到日期时间'我是'110%'当然你使用日期时间数据类型..字段 –

回答

0

我测试你的XML文档,它有几个问题:

下列元素包含字符串数据,但类属性被声明为数值类型:

<OrderType>AtStore</OrderType> 
... 
<RentStatus>Finish</RentStatus> 
... 
<PaymentType>Cash</PaymentType> 

我猜这些应该是枚举?

此外,Order元素未关闭,但我怀疑这只是将XML复制粘贴到问题中的问题。

解决这些问题后,它反序列化好了。

+0

谢谢,我的代码运行良好。 Howerver,我有点困惑,为什么它会抛出日期时间格式异常。 –

+0

这很奇怪,它并没有在我的情况下。我不确定为什么会发生。 – vesan