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 正在传递给这样的对象:

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???

我不知道是序列化程序功能还是其他问题,可能是格式化日期或其他问题?

4

2 回答 2

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>

所以一切看起来都很好。

于 2012-04-27T14:05:34.090 回答
1

要序列化日期,请使用此字符串格式

date_req = rw_mat["dat_pot"].ToString("s");
于 2012-04-27T12:02:24.207 回答