【问题标题】:c# Datetime deserialization problem in camt54 (iso 20022)c# camt54 (iso 20022) 中的日期时间反序列化问题
【发布时间】:2021-03-06 23:57:41
【问题描述】:

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

问题是,当尝试反序列化特定银行的 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 中的值?

提前谢谢你。 马特奥。

【问题讨论】:

  • 嗯。 24?很有趣。
  • 我知道...这很愚蠢恕我直言..
  • 这是时间的 ISO 8601 格式。在标准的早期版本中允许使用 24:00 表示午夜,但在 2019 年修订版中不允许使用 - 维基百科。另见stackoverflow.com/questions/3556144/…
  • 谢谢。所以基本上是使用已弃用标准的 xml 的制造商?

标签: c# xml deserialization


【解决方案1】:

使用以下:

    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); }
            }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-29
    • 1970-01-01
    • 2016-04-16
    • 1970-01-01
    相关资源
    最近更新 更多