首先定义两个实体类:OFFICEData,UserData
利用反射自定义序列化DataSetOFFICEData:
利用反射自定义序列化DataSet[System.ComponentModel.DesignerCategory(
"Code")]
利用反射自定义序列化DataSet    [SerializableAttribute] 
利用反射自定义序列化DataSet    
public class OFFICEData: DataSet,ISerializable
{
利用反射自定义序列化DataSet        
利用反射自定义序列化DataSet                    
利用反射自定义序列化DataSet        
public const string T_OFFICE_OFFICEID="OFFICEID";            
利用反射自定义序列化DataSet        
public const string T_OFFICE_CODENO="CODENO";            
利用反射自定义序列化DataSet        
public const string T_OFFICE_SPELLNO="SPELLNO";            
利用反射自定义序列化DataSet        
public const string T_OFFICE_CUSTOMNO="CUSTOMNO";            
利用反射自定义序列化DataSet        
public const string T_OFFICE_STROKENO="STROKENO";            
利用反射自定义序列化DataSet        
public const string T_OFFICE_OFFICE="OFFICE";            
利用反射自定义序列化DataSet        
public const string T_OFFICE_DISEASEAREA="DISEASEAREA";            
利用反射自定义序列化DataSet        
public const string T_OFFICE_BEDAMOUNT="BEDAMOUNT";            
利用反射自定义序列化DataSet        
public const string T_OFFICE_LIMITFUND="LIMITFUND";            
利用反射自定义序列化DataSet        
public const string T_OFFICE_OFFICETYPE="OFFICETYPE";            
利用反射自定义序列化DataSet        
public const string T_OFFICE_DEPARTMENT="DEPARTMENT";            
利用反射自定义序列化DataSet        
public const string T_OFFICE_POSITION="POSITION";
利用反射自定义序列化DataSet        
利用反射自定义序列化DataSet        
利用反射自定义序列化DataSet        
利用反射自定义序列化DataSet        
private DataTable table;
利用反射自定义序列化DataSet        
private DataColumn col;
利用反射自定义序列化DataSet        
private ArrayList list;
利用反射自定义序列化DataSet    
利用反射自定义序列化DataSet        
private UserData user = new UserData();
利用反射自定义序列化DataSet        
public UserData userData
{


利用反射自定义序列化DataSet        }

利用反射自定义序列化DataSet
利用反射自定义序列化DataSet        
private OFFICEData(SerializationInfo info, StreamingContext context) : base(info, context) 
{
利用反射自定义序列化DataSet                userData
=(UserData)info.GetValue("myData",typeof(Serialize.UserData));
利用反射自定义序列化DataSet        }

利用反射自定义序列化DataSet        
利用反射自定义序列化DataSet        
public OFFICEData()
{
利用反射自定义序列化DataSet            
利用反射自定义序列化DataSet            BuildDataTables();
利用反射自定义序列化DataSet        }

利用反射自定义序列化DataSet
利用反射自定义序列化DataSet        
public void GetObjectData(SerializationInfo info,StreamingContext text)
{
利用反射自定义序列化DataSet            Type t 
= typeof(DataSet);
利用反射自定义序列化DataSet
利用反射自定义序列化DataSet            MethodInfo mi 
=t.GetMethod("System.Runtime.Serialization.ISerializable.GetObjectData",BindingFlags.Instance |BindingFlags.NonPublic );
);
利用反射自定义序列化DataSet
利用反射自定义序列化DataSet            info.AddValue(
"myData",userData);
利用反射自定义序列化DataSet        }

利用反射自定义序列化DataSet
利用反射自定义序列化DataSet        
//构建业务实体类的结构。
利用反射自定义序列化DataSet
        private void BuildDataTables()
{
利用反射自定义序列化DataSet            
利用反射自定义序列化DataSet            table   
= new DataTable("T_OFFICE");
利用反射自定义序列化DataSet                            
利用反射自定义序列化DataSet            table.Columns.Add(
"OFFICEID",typeof(System.Decimal));            
利用反射自定义序列化DataSet            table.Columns.Add(
"CODENO",typeof(System.String));            
利用反射自定义序列化DataSet            table.Columns.Add(
"SPELLNO",typeof(System.String));            
利用反射自定义序列化DataSet            table.Columns.Add(
"CUSTOMNO",typeof(System.String));            
利用反射自定义序列化DataSet            table.Columns.Add(
"STROKENO",typeof(System.String));            
利用反射自定义序列化DataSet            table.Columns.Add(
"OFFICE",typeof(System.String));            
利用反射自定义序列化DataSet            table.Columns.Add(
"DISEASEAREA",typeof(System.String));            
利用反射自定义序列化DataSet            table.Columns.Add(
"BEDAMOUNT",typeof(System.Decimal));            
利用反射自定义序列化DataSet            table.Columns.Add(
"LIMITFUND",typeof(System.Decimal));            
利用反射自定义序列化DataSet            table.Columns.Add(
"OFFICETYPE",typeof(System.String));            
利用反射自定义序列化DataSet            table.Columns.Add(
"DEPARTMENT",typeof(System.String));            
利用反射自定义序列化DataSet            table.Columns.Add(
"POSITION",typeof(System.String));
利用反射自定义序列化DataSet            list
=new ArrayList();
利用反射自定义序列化DataSet                
利用反射自定义序列化DataSet            col
=table.Columns["OFFICEID"];
利用反射自定义序列化DataSet            list.Add(col);
利用反射自定义序列化DataSet                
利用反射自定义序列化DataSet                
利用反射自定义序列化DataSet            table.PrimaryKey
=(DataColumn[])list.ToArray(typeof(DataColumn));
利用反射自定义序列化DataSet            
this.Tables.Add(table);        
利用反射自定义序列化DataSet        }
   
利用反射自定义序列化DataSet}
利用反射自定义序列化DataSetUserData:
利用反射自定义序列化DataSet[System.ComponentModel.DesignerCategory(
"Code")]
利用反射自定义序列化DataSet    [SerializableAttribute] 
利用反射自定义序列化DataSet    
public class UserData: DataSet
{
利用反射自定义序列化DataSet        
利用反射自定义序列化DataSet                    
利用反射自定义序列化DataSet        
public const string T_USERS_UserID="UserID";            
利用反射自定义序列化DataSet        
public const string T_USERS_CodeNo="CodeNo";            
利用反射自定义序列化DataSet        
public const string T_USERS_SpellNo="SpellNo";            
利用反射自定义序列化DataSet        
public const string T_USERS_CustomNo="CustomNo";            
利用反射自定义序列化DataSet        
public const string T_USERS_StrokeNo="StrokeNo";            
利用反射自定义序列化DataSet        
public const string T_USERS_UserName="UserName";            
利用反射自定义序列化DataSet        
public const string T_USERS_Sex="Sex";            
利用反射自定义序列化DataSet        
public const string T_USERS_Birthday="Birthday";            
利用反射自定义序列化DataSet        
public const string T_USERS_Nation="Nation";            
利用反射自定义序列化DataSet        
public const string T_USERS_Diploma="Diploma";            
利用反射自定义序列化DataSet        
public const string T_USERS_Office="Office";            
利用反射自定义序列化DataSet        
public const string T_USERS_LaborageNo="LaborageNo";            
利用反射自定义序列化DataSet        
public const string T_USERS_Duty="Duty";            
利用反射自定义序列化DataSet        
public const string T_USERS_PledgeMoney="PledgeMoney";            
利用反射自定义序列化DataSet        
public const string T_USERS_WorkKind="WorkKind";
利用反射自定义序列化DataSet        
利用反射自定义序列化DataSet        
private DataTable table;
利用反射自定义序列化DataSet        
private DataColumn col;
利用反射自定义序列化DataSet        
private ArrayList list;
利用反射自定义序列化DataSet        
利用反射自定义序列化DataSet        
利用反射自定义序列化DataSet        
private UserData(SerializationInfo info, StreamingContext context) : base(info, context) 
{
利用反射自定义序列化DataSet        }

利用反射自定义序列化DataSet        
利用反射自定义序列化DataSet        
public UserData()
{
利用反射自定义序列化DataSet            
利用反射自定义序列化DataSet            BuildDataTables();
利用反射自定义序列化DataSet        }

利用反射自定义序列化DataSet        
利用反射自定义序列化DataSet        
//构建业务实体类的结构。
利用反射自定义序列化DataSet
        private void BuildDataTables()
{
利用反射自定义序列化DataSet            
利用反射自定义序列化DataSet            table   
= new DataTable("T_USERS");
利用反射自定义序列化DataSet                            
利用反射自定义序列化DataSet            table.Columns.Add(
"UserID",typeof(System.Int32));            
利用反射自定义序列化DataSet            table.Columns.Add(
"CodeNo",typeof(System.String));            
利用反射自定义序列化DataSet            table.Columns.Add(
"SpellNo",typeof(System.String));            
利用反射自定义序列化DataSet            table.Columns.Add(
"CustomNo",typeof(System.String));            
利用反射自定义序列化DataSet            table.Columns.Add(
"StrokeNo",typeof(System.String));            
利用反射自定义序列化DataSet            table.Columns.Add(
"UserName",typeof(System.String));            
利用反射自定义序列化DataSet            table.Columns.Add(
"Sex",typeof(System.String));            
利用反射自定义序列化DataSet            table.Columns.Add(
"Birthday",typeof(System.DateTime));            
利用反射自定义序列化DataSet            table.Columns.Add(
"Nation",typeof(System.String));            
利用反射自定义序列化DataSet            table.Columns.Add(
"Diploma",typeof(System.String));            
利用反射自定义序列化DataSet            table.Columns.Add(
"Office",typeof(System.String));            
利用反射自定义序列化DataSet            table.Columns.Add(
"LaborageNo",typeof(System.String));            
利用反射自定义序列化DataSet            table.Columns.Add(
"Duty",typeof(System.String));            
利用反射自定义序列化DataSet            table.Columns.Add(
"PledgeMoney",typeof(System.Decimal));            
利用反射自定义序列化DataSet            table.Columns.Add(
"WorkKind",typeof(System.String));
利用反射自定义序列化DataSet            list
=new ArrayList();
利用反射自定义序列化DataSet                
利用反射自定义序列化DataSet            col
=table.Columns["UserID"];
利用反射自定义序列化DataSet            list.Add(col);
利用反射自定义序列化DataSet                
利用反射自定义序列化DataSet                
利用反射自定义序列化DataSet            table.PrimaryKey
=(DataColumn[])list.ToArray(typeof(DataColumn));
利用反射自定义序列化DataSet            
this.Tables.Add(table);
利用反射自定义序列化DataSet                
利用反射自定义序列化DataSet                
利用反射自定义序列化DataSet        
利用反射自定义序列化DataSet        }

利用反射自定义序列化DataSet        
利用反射自定义序列化DataSet        
利用反射自定义序列化DataSet        
利用反射自定义序列化DataSet    }

因为DataSet实现了序列化接口ISerializable,而基类的DataSet.GetObjectData是私有的,
如果从实现了 ISerializable 的类派生出一个新的类,则只要新的类中含有任何需要序列化的变量,
就必须同时实现构造函数以及 GetObjectData 方法
 DataSet实现了ISerializable,但是,他确封装了GetObjectData方法
所以在OFFICEData.GetObjectData中利用反射调用DataSet.GetObjectData方法.

相关文章:

  • 2021-09-23
  • 2021-11-13
  • 2022-12-23
  • 2018-07-25
  • 2022-01-05
  • 2021-12-15
  • 2021-07-20
猜你喜欢
  • 2021-07-12
  • 2021-09-12
  • 2022-12-23
  • 2021-12-15
  • 2022-12-23
  • 2021-09-03
  • 2022-01-19
相关资源
相似解决方案