【问题标题】:how to serialize type object[,] in c#如何在 C# 中序列化类型 object[,]
【发布时间】:2015-09-08 17:12:21
【问题描述】:

我确信这是一个非常基本的问题。最终目标是在 Excel 中获取一个通常包含文本和双精度值的范围,并将内容转储到 SQL 数据库中。

我想将范围(这是作为object[,] 输入到c# 代码中的)将其转储到XML 字符串中并将其直接保存到数据库中。

我已经编写了一些我自己的类,我可以使用DataContractSerializer 轻松地对其进行序列化。然而,当涉及到序列化object[,] 时,我遇到了难题,在网上进行的大量搜索只是告诉我如何序列化我已经知道的更复杂的用户定义类。

是否可以序列化这种原始类型?如果是的话怎么办?

【问题讨论】:

  • 为什么要将它们序列化为xml?将它们转换为实际类型,然后将它们存储在适当的数据库模式中不是更好吗?
  • 多种原因 - 一些遗留问题,一些想要重用现有表。最终目标是能够存储作为隔夜批处理的一部分运行的计算结果。然后,用户可以在第二天早上检索这些结果。结果的形状和性质将根据已运行的计算而改变。使用序列化我可以一般地存储和显示结果,如果我可以序列化范围,至少我可以......
  • 假设数组中的所有内容都是原始的(例如值类型),我建议使用更强大的序列化库,您可以引用 github.com/nessos/FsPickler 之类的东西 - 即使它是用 F# 编写的,您也可以从 C# 调用它。

标签: c# serialization datacontractserializer primitive


【解决方案1】:

您不能使用DataContractSerializer 序列化多维数组。

来自msdn

允许组合集合类型(具有集合的集合)。锯齿状数组被视为集合的集合。不支持多维数组。

object[,]切换到object[][],即从多维数组到锯齿状数组。

【讨论】:

  • 承认 - 我可以切换到使用一维数组 - 这不是问题。即使我有一个object[] - 我也不清楚它是如何自行序列化的。如果我创建一个类并将该类的object[] 成员声明为DataMember(),它将被序列化没有问题。但是在这里我有一个独立的object[,],我想序列化它不在一个类中。这可以实现还是我需要围绕它编写一个包装类?
  • ???我不确定我是否理解你。 DataContractSerializer 不支持多维数组。这是事实。它是包含在类中还是独立的都没有关系。你不能那样做。
  • Vera - 我可以轻松地将我的二维数组写入一维数组 - 而且我与DataContractSerializer 无关,这些都不是问题。问题是如何使用 _any 序列化器序列化原始对象 [] 类型。
  • @CraigRobinson 停下!现在你说的是object[] 而不是object[,]。你想做什么?是否要序列化object[]?这个数组包含什么?
  • 这个问题被发送到主题之外,但为了清楚起见——最终我想序列化一个object[,]——我想要做的事情在上面已经清楚地描述了。但是 - 如果有必要,我可以通过将原始 object[,] 分解为 object[] 来简化问题。问题也可能是我如何序列化int[]double[]。如何在 c# 中序列化这些原始类型?我找不到任何描述这个看似微不足道的问题的东西——只有序列化用户定义类的东西。此外,我不在乎使用哪个序列化,DataContractSerializerXmlSerializer
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-28
  • 1970-01-01
  • 2012-08-11
  • 1970-01-01
  • 2021-05-14
  • 1970-01-01
相关资源
最近更新 更多