2012-04-27 2 views
1

У меня есть одна проблема. Я должен сериализовать объект и что объект sam преобразуется в XML, но это объект datetime.серийный объект дата/время

Хорошо, у меня есть строка переменной, которая заполнена данными из некоторого запроса 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; 

       } 

Так я хочу, чтобы получить DATETIME переменную XML, но я этого не сделать, XML должен выглядеть примерно так (это просто сегмент)

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

Но проблема в том, что XML является не показывая узел> DateDeliveryRequest его нет Я не получаю ошибку, просто нет узла> DateDeliveryRequest ???

Не знаю, проблема в функции serializer или на чем-то другом, может быть, в дате создания или что-то еще?

+0

Вы можете показать класс Agr3PL.DataArea.Header? – Reniuz

+0

Это часть, из которой она обитала [System.Xml.Serialization.XmlElementAttribute (DataType = "date")] public System.DateTime DateDeliveryRequest { get { return this.dateDeliveryRequestField; } set { this.dateDeliveryRequestField = значение; } } – CrBruno

+0

В процессе отладки вы можете увидеть, что DateDeliveryRequest действительно установлен ?. Возможно, вам нужно попробовать DateTime.Parse() вместо Convert.ToDateTime() – Reniuz

ответ

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

Ok, Thaks, это кажется, что код работает, но я получил это COR Объявление похоже, что сериализатор не сериализовал его, узел не существует, как будто он удален или что-то еще – CrBruno

+0

Можете ли вы добавить весь код в pastebin? Может быть, тогда мы сможем найти проблему. – Reniuz

+0

Спасибо за помощь, я больше не хочу вас беспокоить, я думаю, что это проблема в serialzizer, мне нужно написать ее по-другому. – CrBruno

1

Для сериализации даты использовать эту строку формата

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

I'cant сделать это так, он дает мне ошибку – CrBruno

Смежные вопросы