C# 序列化数据集释放列中的自定义数据类型

C# 序列化数据集释放列中的自定义数据类型,c#,serialization,dataset,C#,Serialization,Dataset,我通过WCF传递数据集和/或在会话管理器中序列化它。 反序列化对象后,数据将从自定义列中消失。我可以在序列化对象之前验证数据是否存在。自定义对象用于实现字母数字排序,并使用[Serializable]属性。数据集不是强类型的 要遵循的解决方案…可以在数据集中序列化自定义数据类型,但它们需要实现IXmlSerializable接口 using System; using System.Text; using System.Xml; using System.Xml.Schema; using Sy

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


要遵循的解决方案…

可以在数据集中序列化自定义数据类型,但它们需要实现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);
    }

传递dataset或datatable不是一种好的做法。
因此,在dataset中的datatable上迭代并填充要序列化的自定义类或类集合(不要忘记设置datacontract和datamember属性)

[Serializable]
被XML序列化程序忽略。一般来说,通过web服务传递
dataset
或其他.NET特定类型是个坏主意。只有当另一方总是运行兼容版本的.NET时,这才有意义。我意识到这不是最佳实践,但有时你必须充分利用你所拥有的。这也适用于与会话状态服务器一起使用的数据集。我很好奇,当一个完全可服务的容器已经存在时,为什么引入自己的容器来传递数据是一个好的做法?