【问题标题】:Serialized Dataset looses custom data types in columns序列化数据集在列中丢失了自定义数据类型
【发布时间】:2012-08-18 00:02:06
【问题描述】:

我正在通过 WCF 传递数据集和/或在会话管理器中对其进行序列化。 反序列化对象后,数据从自定义列中消失。我可以在对象被序列化之前验证数据是否存在。自定义对象用于实现字母数字排序,它使用 [Serializable] 属性。数据集不是强类型的。

解决方案...

【问题讨论】:

  • 一般来说,通过 Web 服务传递 DataSet 或其他特定于 .NET 的类型是个坏主意。只有当对方始终运行兼容版本的 .NET 时才有意义。

标签: c# serialization dataset


【解决方案1】:

自定义数据类型可以在数据集中进行序列化,但它们需要实现 IXmlSerializable 接口。

using System;
using System.Text;
using System.Xml;
using System.Xml.Schema;
using System.Xml.Serialization;

  [Serializable]
  public class AlphaNumericSort : IComparable, IXmlSerializable
  {
...
    // Xml Serialization Infrastructure 
    public void WriteXml (XmlWriter writer)
    {
        writer.WriteString(_Value);
    }

    public void ReadXml (XmlReader reader)
    {
        _Value = reader.ReadString();
    }

    public XmlSchema GetSchema()
    {
        return(null);
    }

【讨论】:

  • [Serializable] 被 XML 序列化程序忽略。
【解决方案2】:

传递数据集或数据表不是一个好习惯。 因此,迭代数据集中的数据表并填充您将序列化的自定义类或类集合(不要忘记设置 datacontract 和 datamember 属性)

【讨论】:

  • 我知道这不是最佳实践,但有时您必须充分利用现有资源。这也适用于与会话状态服务器一起使用的数据集。
  • 我很好奇为什么在已经存在完美可用的容器的情况下引入自己的容器来传递数据是一种好习惯?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-05
  • 2020-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多