2012-04-27 109 views
1

我有一个问题。我必须序列化一个对象,并且SAM对象被转换为XML,但它是一个日期时间对象。序列化对象日期/时间

好,我有填充有数据从一些SQL查询字符串变量,像这样

// DateDeliveryRequest

if (rw_mat["dat_pot"].ToString().Length <= 0) 
    { 
      date_req = ""; 
    } 
    else 
    { 
      date_req = rw_mat["dat_pot"].ToString(); 
    } 

现在,date_req正在passet反对这样的:

var dtfi = new DateTimeFormatInfo { ShortDatePattern = "dd-MM-yyyy", DateSeparator = "-" }; 
Agr3PL.DataArea.Header.DateDeliveryRequest = Convert.ToDateTime(date_req, dtfi); 

最后,这个对象与其他被传递给序列化函数:

private string SerializeAnObject(object obj) 
      { 

       System.Xml.XmlDocument doc = new XmlDocument(); 

       System.Xml.Serialization.XmlSerializer serializer = new  System.Xml.Serialization.XmlSerializer(obj.GetType()); 

       System.IO.MemoryStream stream = new System.IO.MemoryStream(); 

       try 
       { 

        serializer.Serialize(stream, obj); 

        stream.Position = 0; 

        doc.Load(stream); 

        return doc.InnerXml; 

       } 

       catch (Exception ex) 
       { 
        WriteErrors.WriteToLogFile("WS.SAVE_DOK_SERIJALIZACIJA", ex.ToString()); 

        throw ex; 

       } 

所以我想日期时间变量,以XML,但我不这样做,XML已经到这个样子(这仅仅是一个段)

- <Header> 
    <MessageType>COR</MessageType> 
    <UniqueHeaderNumber /> 
    <UniqueHeaderNumberFromWMS /> 
    <CompanyCode /> 
    <OrderNumber /> 
    <InvoiceNumber /> 
    <MovementNumber /> 
    <ReceiptNumber /> 
    <DebitNoteNumber /> 
    <PickNoteNumber /> 
    <LoadNumber /> 
    <DropSequence /> 
    <BulkPickNoteNumber /> 
    <NumberOfPallets /> 
    <DateDeliveryRequest /> 

但问题是,XML是不显示节点> DateDeliveryRequest它不存在 我没有得到错误,只是没有节点> DateDeliveryRequest ???

我不知道是序列化函数还是别的什么问题,也许在格式化日期或其他东西?

+0

可以显示Agr3PL.DataArea.Header类吗? – Reniuz 2012-04-27 12:06:44

+0

这是来自哪里的部分inhirited [System.Xml.Serialization.XmlElementAttribute(DataType =“date”)] public System.DateTime DateDeliveryRequest { get { return this.dateDeliveryRequestField; } set { this.dateDeliveryRequestField = value; } } – CrBruno 2012-04-27 12:15:33

+0

在调试时你能否看到DateDeliveryRequest是真正设置的?也许你需要尝试DateTime.Parse(),而不是Convert.ToDateTime() – Reniuz 2012-04-27 12:25:33

回答

1

我测试此代码:

public class Test 
{ 
    private DateTime dateDeliveryRequestField; 

    [System.Xml.Serialization.XmlElementAttribute(DataType = "date")] 
    public System.DateTime DateDeliveryRequest { get { return this.dateDeliveryRequestField; } set { this.dateDeliveryRequestField = value; } } 
} 

private string SerializeAnObject(object obj) 
{ 
    System.Xml.XmlDocument doc = new XmlDocument(); 
    System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(obj.GetType()); 
    System.IO.MemoryStream stream = new System.IO.MemoryStream(); 
    try 
    { 
     serializer.Serialize(stream, obj); 
     stream.Position = 0; 
     doc.Load(stream); 
     return doc.InnerXml; 
    } 
    catch (Exception ex) 
    { 
     throw ex; 
    } 
} 

Test n = new Test(); 
n.DateDeliveryRequest = DateTime.Parse("2012-10-07"); 
string result = SerializeAnObject(n); 

和结果:

<?xml version="1.0"?> 
<Test xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <DateDeliveryRequest>2012-10-07</DateDeliveryRequest> 
</Test> 

所以,一切看起来不错。

+0

好吧,thaks,似乎代码工作,但我得到这个 COR <企业编码/> 点头它就像序列化程序没有序列化它,节点不存在,就像它被删除或其他东西 – CrBruno 2012-04-27 19:24:17

+0

你可以添加所有代码到pastebin吗?也许那么我们可以找到问题。 – Reniuz 2012-04-28 14:46:00

+0

感谢您的帮助,我不会再打扰您,我认为这是serialzizer中的一个问题,我必须写它不同。 – CrBruno 2012-05-03 11:54:30

1

要序列日期使用字符串格式

date_req = rw_mat["dat_pot"].ToString("s"); 
+0

I'cant像这样做,它给我一个错误 – CrBruno 2012-04-27 12:17:13

相关问题