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

Posted

技术标签:

【中文标题】如何在 C# 中仅从 DateTime 序列化 Xml 日期【英文标题】:How to serialize Xml Date only from DateTime in C# 【发布时间】:2021-10-10 11:12:44 【问题描述】:

我有以下简单的类;

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。

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

【问题讨论】:

【参考方案1】:

您应该使用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 属性支持),如Force XmlSerializer to serialize DateTime as 'YYYY-MM-DD hh:mm:ss'(DataContractSerializer 需要此属性,其中xs:date 类型不是支持)

【讨论】:

我不得不承认比我的回答要好:)【参考方案2】:

试试这个例子:

        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

【讨论】:

(第二部分:) 将切断任何现有时间,但“dateTime”仍然具有 00:00 时间。不会改变任何事情。 这就是为什么我评论使用 datetime.Date。 但仍然:xml 看起来就像以前一样 如果问题在于想要序列化,那么不是我的,不是你的,而是 tim S.(我的意思是单个属性结果)。我的答案是不重写类(尽管它是最好的解决方案) ,并且只需“获取”所需的格式。 帮我到那里为 XElement 保存日期,谢谢。

以上是关于如何在 C# 中仅从 DateTime 序列化 Xml 日期的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C# 中仅反序列化 XML 文档的一部分

如何在 android 中仅从 lat, long 获取 City, State, Country

如何在 mysql PDO 选择查询中仅从时间戳中选择时间?

如何在 android 应用程序中仅从服务器获取更新的数据?

如何在 C# 或 JavaScript 的输入日期类型中仅启用当前日期

仅从日期时间字段(mysql)中提取日期并将其分配给 php 变量