在 C# 中使用多维数值序列化对象

本文关键字:序列化 对象 | 更新日期: 2023-09-27 18:34:12

我的程序生成一些数字结果,这些结果保存在一个类中:

[Serializable]
public class Examination
{
    public string _examiner { get; set; }
    public string _interpretation { get; set; }
    DateTime _examination_date { get; set; }
    // two following properties about 100x100 in size
    public Point3D[,] _surface_coordinates { get; set; }
    public double [,] _mapa_curvatura { get; set; }
    public Point3DCollection _symmetry_line { get; set; }
}

现在我想使用序列化来保持这一点(原则上不需要 ORM/数据库(,我有一些疑问:

  1. 我需要序列化数据可供其他语言(主要是 Python(的脚本访问,所以我不会使用二进制序列化,而是使用 XmlSerialization;
  2. 不支持多维数据,所以我不得不[,]数组转换为[][]数组,这对我来说看起来有点"脏"(不过,如果这是唯一的问题,没什么大不了的(;
  3. 生成的 XML 有点太大了(每个文件 2Mb(,而我在 python 中使用 quick'n'dirty 二进制格式得到的结果要小得多(例如,将双精度数组保存到长字符串中,将行和列放在文件名本身中,然后在反序列化期间解析它并重塑:也不漂亮!

由于我是序列化领域的完全初学者,我想问:"将此类序列化和反序列化到磁盘的建议策略/策略是什么?主要要求是:

  • 可读其他语言;
  • 紧凑的文件大小;
  • 尊重 C#/.NET 良好做法和常用习惯用语;

感谢您的阅读!

在 C# 中使用多维数值序列化对象

可读其他语言

这是设计XML的原因之一,我个人会坚持下去。

紧凑的文件大小

您是否考虑过将其存储为压缩文件?例如MyXml.zip。

尊重 C#/.NET 的良好做法和常用习惯

只要坚持使用文档,你应该没事。