如何在 C# 中仅从 DateTime 序列化 Xml Date

问题描述 投票:0回答:2

我有以下简单的课程;

Birthdays
{
  public DateTime DateOfBirth {get;set;}
  public string Name {get;set;}
}

然后我使用;

将我的对象序列化为 Xml
try
{
   XmlSerializer serializer = new XmlSerializer(obj.GetType());
            
   using (MemoryStream ms = new MemoryStream())
   {
        XmlDocument xmlDoc = new XmlDocument();

        serializer.Serialize(ms, obj);
        ms.Position = 0;
        xmlDoc.Load(ms);
        return xmlDoc;
    }
}
catch (Exception e)
{
    ....
}

我遇到的问题是,当返回 Xml 时,

DateOfBirth
格式类似于
2012-11-14T00:00:00
而不是
2012-11-14

如何覆盖它以便只返回日期部分?

c# xml datetime serialization xml-serialization
2个回答
31
投票

您应该使用

XmlElementAttribute.DataType
属性并指定
date

public class Birthdays
{
  [XmlElement(DataType="date")]
  public DateTime DateOfBirth {get;set;}
  public string Name {get;set;}
}

使用此输出

<?xml version="1.0" encoding="utf-16"?>
<Birthdays xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <DateOfBirth>2013-11-14</DateOfBirth>
  <Name>John Smith</Name>
</Birthdays> 

另一种选择是仅使用

string
属性进行序列化(由您使用的
DateTime
属性支持),如 强制 XmlSerializer 将 DateTime 序列化为 'YYYY-MM-DD hh:mm:ss' (此
DataContractSerializer
需要,其中
xs:date
类型没有得到很好的支持)


-1
投票

尝试一下这个例子:

        string date = "2012-11-14T00:00:00";

        string result = DateTime.Parse(date).ToShortDateString();

        //or....

        DateTime dateTime = new DateTime();

        dateTime = DateTime.Parse(date);
        //now its only use dateTime.Date
© www.soinside.com 2019 - 2024. All rights reserved.