首页 > 解决方案 > c# camt54 (iso 20022) 中的日期时间反序列化问题

问题描述

如果已经问过这个问题,我提前道歉,但我找不到任何可以帮助我理解如何解决问题的东西。

问题是,当试图反序列化特定银行的 camt54 时,我的程序出错了。调查问题后,我意识到反序列化器无法转换此标签:

<ToDtTm>2020-11-18T24:00:00+01:00</ToDtTm>
    

显然我明白为什么。C# datetime 格式不包括 24:00:00,调试器返回错误:“字符串 '2020-11-18T24:00:00+01:00' 不是有效的 AllXsd 值”

但从我对 xml 的理解来看,这是一个可接受的值。

不幸的是,这是发生在我身上的第一个案例。我已经反序列化了很多 camt54,直到现在还没有遇到任何问题。

如何告诉反序列化器正确读取插入到 xml 中的值?

先感谢您。马特奥。

标签: c#xmldeserialization

解决方案


使用以下:

    class Program
    {
        static void Main(string[] args)
        {
            string xml = "<root><ToDtTm>2020-11-18T24:00:00+01:00</ToDtTm></root>";
            StringReader sReader = new StringReader(xml);
            XmlReader xReader = XmlReader.Create(sReader);
            XmlSerializer serializer = new XmlSerializer(typeof(root));
            root root = (root)serializer.Deserialize(xReader);
        }
    }
    public class root
    {
        public DateTime _ToDtTm { get; set; }
        public String ToDtTm {
            get {
                return _ToDtTm.ToString(@"yyyy-MM-dd\Thh:mm:sszzz"); 
            }
            set {
                string date = value.Replace("T24", "T00");
                _ToDtTm = DateTime.Parse(date); }
            }
    }

推荐阅读