为什么要用BinaryFormatter序列化DataSet呢?可以直接用DataSet.WriteXml方法嘛。
/// <summary>
/// 将指定DataTable转换为其等效的Xml流形式。
/// </summary>
/// <param name="table">DataTable对象</param>
/// <returns></returns>
public string ToXmlString(DataTable table)
{
if(table == null)
{
return null;
} StringBuilder content = new StringBuilder();
StringWriter writer = new StringWriter(content);
XmlTextWriter xmlWriter = new XmlTextWriter(writer); try
{
DataSet ds = new DataSet();
ds.Tables.Add(table.Copy());
ds.WriteXml(xmlWriter); return content.ToString();
}
finally
{
writer.Close();
xmlWriter.Close();
}
}/// <summary>
/// 将指定的Xml流转换为其等效的DataSet对象。
/// </summary>
/// <param name="xmlStream">Xml流</param>
/// <returns></returns>
public DataSet ToDataSet(string xmlStream)
{
if(xmlStream == null || xmlStream.Trim().Length == 0)
{
return null;
} StringReader reader = new StringReader(xmlStream);
XmlTextReader xmlReader = new XmlTextReader(reader);
try
{
DataSet ds = new DataSet();
ds.ReadXml(xmlReader);
return ds;
}
finally
{
reader.Close();
xmlReader.Close();
}
}

解决方案 »

  1.   

    to TonyJoule(寒星㊣):
    你的那个方法我已经实现,但这个方法只能保存数据,不能保存状态,当dataset从一台机器传到另一台机器时,dataset的原来所有状态都消失了,全部都还原为默认状态。
    所以我才想到要将dataset序列化,这样可以保存所有的状态。
      

  2.   

    状态?什么状态?
    /// <summary>
    /// 将对象或具有指定顶级(根)的对象图形序列化为给定流
    /// </summary>
    /// <param name="sourceObject">位于要序列化图形的根位置的对象</param>
    /// <returns></returns>
    public MemoryStream Serialize(object sourceObject)
    {
    using(MemoryStream stream = new MemoryStream())
    {
    formatter.Serialize(stream, sourceObject);
    return stream;
    }
    }/// <summary>
    /// 将流反序列化为对象图形
    /// </summary>
    /// <param name="stream">将指定的流反序列化为对象图形</param>
    /// <returns></returns>
    public object Deserialize(MemoryStream stream)
    {
    return formatter.Deserialize(stream);
    }/// <summary>
    /// 将流反序列化为对象图形
    /// </summary>
    /// <param name="stream">将指定的流反序列化为对象图形</param>
    /// <returns></returns>
    public static object Deserialize(byte[] stream)
    {
    return formatter.Deserialize(new MemoryStream(stream));
    }
    // formatter为BinaryFormatter对象。
      

  3.   

    不是以流的形式,而是以string的形式
      

  4.   

    /// <summary>
    /// 将字节数组转换成字符串
    /// </summary>
    /// <param name="sourceArray">字节数组</param>
    /// <returns></returns>
    public string ByteArrayToString(byte[] sourceArray)
    {
    Encoding encoding = Encoding.GetEncoding("Gb2312"); return encoding.GetString(sourceArray);
    }
      

  5.   

    用你的方法
    public string ByteArrayToString(byte[] sourceArray)
    {
    Encoding encoding = Encoding.GetEncoding("Gb2312"); return encoding.GetString(sourceArray);
    }
    得到的string如何还原成datatable呢?
      

  6.   

    //要将对象序列化为字符串只用使用XML序列化
    //在这之前已经有一个[Serializable]标记的类了
    //然后声明一个可以序列化的对象
    sd=new serializable();
    sd.ds=ds;
    //进行Xml格式的序列化
    XmlSerializer mySerializer = new  XmlSerializer(typeof(serializable));
    //将对象sd序列化到内存流
    System.IO.MemoryStream  myWriter = new MemoryStream();
    mySerializer.Serialize(myWriter, sd);
    //返回
    return myWriter.GetBuffer();