2012-04-27 83 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