提问人:Ivan Debono 提问时间:7/26/2023 更新时间:7/26/2023 访问量:38
XMLSerializer 使用时区序列化 DateTime 属性
XMLSerializer serializing DateTime property with timezone
问:
我有一个具有属性的对象。这些值不包括时区。属性是。然后,我按如下方式序列化对象:DateTime
Kind
Local
var settings = new XmlWriterSettings()
{
Indent = true,
OmitXmlDeclaration = true
};
using (var sw = new StringWriter())
using (var xw = XmlWriter.Create(sw, settings))
{
serializer.Serializer.Serialize(xw, myObj);
myXml = sw.ToString();
}
字符串被序列化,并且在序列化过程中修改了日期属性的值,现在时间部分已添加/减去时区。
我的第一个问题是:序列化程序是否使用系统设置来序列化日期时间属性?
我的实际问题是:有没有办法让序列化程序忽略时区(最好在序列化程序上设置一些属性而不修改对象)?
答:
0赞
user22239103
7/26/2023
#1
回答第一个问题:是的,如果 DateTime.Kind 属性设置为 Local,则序列化程序使用系统设置来序列化 DateTime 属性。序列化过程根据系统的时区设置将 DateTime 对象转换为 XML 格式。
实际问题的答案:遗憾的是,XmlSerializer 类中没有内置属性,该属性允许您直接控制 DateTime 属性相对于时区的序列化。使用 XmlSerializer 序列化 DateTime 属性时,将根据系统的设置包含时区信息,如果不修改 DateTime 对象本身,则无法直接重写此行为。
如果要避免修改原始对象并确保在序列化过程中不包含时区信息,则可能需要考虑替代方法。一种可能的解决方案是为对象中的每个 DateTime 属性创建一个自定义属性,该属性以特定格式(例如,“yyyy-MM-dd HH:mm:ss”)表示日期和时间,而不包含时区信息。然后,使用 XmlIgnore 属性标记此自定义属性,以便它不会被序列化。您可以使用此定制属性来存储不带时区信息的 DateTime 值,并将原始属性用于应用程序内部使用或计算。
评论
0赞
Ivan Debono
7/26/2023
由于对象是从客户端(网站)到服务器的 DTO,并且我正在使用 NewtonSoft 和 Automapper,也许我可以在那里实现转换。DateKind.Unspecified
0赞
7/26/2023
我认为您正在研究和尝试是个好主意。这样你就会得到更好的理解。我也认为您的解决方案可能会奏效~感谢您的尝试。
评论