zoukankan      html  css  js  c++  java
  • DataTable to byte[]、DataTable to XML(string)

    DataTabe 对象在很多地方都会用到,特别是在Web Service、Socket等需网络传输的地方。

    但是在有些地方,如果直接传递的话,程序可能会报告DataTable无法序列化错误。

    解决问题的方法,是对DataTable进行序列化。

    FCL提供的用于序列化的方法组要有三种:

    1.XML Serialization

    2.Binary Serialization

    3.SOAP Serialization

    感兴趣的可查下相关的具体操作文章,如 Introducing Serialization in .NET Object Serialization in the .NET Framework等。

    --------------------------------------------------

    DataTable传递的问题各位博友应当经常遇到,下面提供一种实现。

    1.DataTable to byte[]

    MemoryStream ms = new MemoryStream();
    BinaryFormatter bf = new BinaryFormatter();
    bf.Serialize(ms, dt);
    byte[] tableBT = ms.ToArray();

    2. byte[] to DataTable (即把上面的byte[]还原)

    BinaryFormatter bf = new BinaryFormatter();
    MemoryStream ms = new MemoryStream(tableBT);
    DataTable dt = bf.Deserialize(ms) as DataTable;

    -----------------------------------------

    DebugLZQ前面写过一篇相关博文:stream、string、byte[] 互转 ,有兴趣也可以看下。

    -----------------------------------------

    3.DataTable to XML(string)

    string result;
    using (StringWriter sw = new StringWriter()) {
    dataTable.WriteXml(sw);
    result = sw.ToString();
    }

    关注datatable的WriteXML 有N个重载:WriteXml(String)、WriteXml(Stream)等。与之对应的还有个ReadXML,同样也有N个重载.

    // DataTable to Stream.
    System.IO.MemoryStream xmlStream = new System.IO.MemoryStream();
    table.WriteXml(xmlStream, XmlWriteMode.WriteSchema);
    
    // Stream to DataTable.
    xmlStream.Position = 0;
    
    DataTable newTable = new DataTable();
    newTable.ReadXml(xmlStream);

    以上这些加上stream、string、byte[] 互转 可以实现DataTable的任意灵活转换。 

    --------------------------------------------

    经DebugLZQ证实:Web service、WCF等均可直接传递datatable对象,倒是无法传递sqlparameters对象(序列化后可传递)。请参见DebugLZQ前面的相关博文。

    由此可见,上述转换(序列化)各位博友 就知道有这么一回事,实在需要的时候再翻看看提供个参考。

    -----------------------------------------

    希望对你有帮助~

  • 相关阅读:
    PHP 指定的 CGI 应用程序由于未返回完整的一组 HTTP 头而产生错误行为。
    BPM触发事件
    封装继承多态到底讲的是什么
    .Net 为什么叫.Net 转载自 jerrylsxu 的博客
    C# 琐碎记忆 Message
    SQL Case
    C# 命名规范(部分)
    C# 反射
    C# 日志 log 配置文件
    C# 琐碎记忆 三元表达式
  • 原文地址:https://www.cnblogs.com/DebugLZQ/p/3117015.html
Copyright © 2011-2022 走看看