DataSet读取出来有如下字段
[UserInfo],[Organize],[WorkID],[Team],[UserType],[LoginCode],[UserName],[PWD],[Phone],[Re]其中Team和Phone为Null,在pDS中可以检查到这两个Column的存在但是通过string mXML = System.Text.Encoding.UTF8.GetString(mDSBT);看不到这两个字段
如果不是为null的字段均能看到,我想要让无论是否为null的字段都被系列化出来,如何实现?
因为反系列化成DataSet的时候如果看不到Team和Phone的话,读取DataSet字段的时候就会有问题系列化代码如下:
        public static byte[] DataSetSerialize(System.Data.DataSet pDS, bool pCompress)
        {
            try
            {
                System.IO.MemoryStream unMS = new System.IO.MemoryStream();
                pDS.WriteXml(unMS);                unMS.Seek(0, System.IO.SeekOrigin.Begin);                byte[] mDSBT = unMS.ToArray();                string mXML = System.Text.Encoding.UTF8.GetString(mDSBT);   //这里转换成XML,XML内容如下面所示                return mDSBT;
            }
            catch (NullReferenceException NullEx)
            {
                throw NullEx;
            }
            catch (Exception Ex)
            {
                throw Ex;
            }
        }
系列化后的XML内容如下:(XML没有了Team和Phone两个字段)<NewDataSet>
  <Table>
    <UserInfo>b6ed2733-a2f4-43f3-97f2-1d1a6b51635a</UserInfo>
    <Organize>6d809ca9-fe49-443c-b120-0809742ef069</Organize>
    <UserType>2</UserType>
    <LoginCode>wzlda</LoginCode>
    <UserName>林大安</UserName>
    <PWD>18</PWD>
    <Re />
  </Table>
</NewDataSet>

解决方案 »

  1.   

    写入xml的时候把schema也写进去就应该没问题了:   
        
      pDS.WriteXml("myxml.xml",   XmlWriteMode.WriteSchema);   
      pDS.ReadXml("myxml.xml",XmlReadMode.ReadSchema):   
      

  2.   

    WriteSchema 会导致XML长了很多倍,不划算写默认值也存在问题,之所以发生有null的情况,原因就是不同的程序代码导致的问题,现在出现了,以后也可能出现
    有其它办法吗?
      

  3.   

     System.IO.MemoryStream s=new System.IO.MemoryStream();
     SoapFormatter sf=new SoapFormatter();
     sf.Serialize(s,myds);
    s.Seek(0,SeekOrigin.Begin);
    或用XmlSerializer
    http://blog.csdn.net/gloomyboyo/archive/2006/08/07/1029678.aspx
      

  4.   

    System.Runtime.Serialization.Formatters.Soap.SoapFormatter sf = new System.Runtime.Serialization.Formatters.Soap.SoapFormatter();
    sf.Serialize(unMS, pDS);这种方式我也不划算,系列化之后有4193 字节,我原有的才308 字节,网络传输上开销太大了,我们是通过GPRS通讯的,因此字节流大小需要重点考虑
      

  5.   

    又不愿意用 DataSet.WriteXml, 那只好自己写序列化了
      

  6.   

    这样就不会丢了。
     DataSet ds = new DataSet();
     ds.WriteXml(@"C:\aaa.xml", XmlWriteMode.WriteSchema);
      

  7.   

    看来仅有此答案了或许可以系列化成不带架构,在客户端保留一份XSD配合反系列化也是可以的