首先谢谢下面即将回复的热心、好心的高手,在此申明看清题目,希望回复不要答非所问而且一两句轻描淡写的回复,这样供日后我参考、供大家在网上搜索到后可有效的参考都是一件好事儿。
   下面进入正题:
   首先有这样两个类
   [Serializable]
   public class Department
   {
   private string id;
   priavte string name;
   //...其它
   private IList<Staff> staff = new List<Staff>();   //封装字段   public Department DepartmentClone()
   {   MemoryStream stream = new MemoryStream();
   BinaryFormatter formatter = new BinaryFormatter();
   formatter.Serialize(stream, this.Department);
   stream.Position = 0;   return formatter.Deserialize(stream) as Department;
   }
   }   [Serializable]
   public class Staff
   {
   private string id;
   private string name;
   private string DepId;
   //...其它
     
  //封装字段   public Staff StaffClone()
   {   MemoryStream stream = new MemoryStream();
   BinaryFormatter formatter = new BinaryFormatter();
   formatter.Serialize(stream, this.Staff);
   stream.Position = 0;   return formatter.Deserialize(stream) as Staff;
   }
   }   上面两个类分别表示部门类和员工类,具体里面详情就不具体写出,现有下面XML文件如下:
   <?xml version="1.0" encoding="utf-8" ?>
   <company>
   <department id="1",name="研发部">
   <staff id="1" name="员工张三"></staff>
   <staff id="2" name="员工李四"></staff>
   <staff id="3" name="员工王五"></staff>
   ...
   </department>
   <department id="2",name="行政部">
   <staff id="1" name="员工A"></staff>
   <staff id="2" name="员工B"></staff>
   ...
   </department>
   <department id="3",name="商务部">
   <staff id="1" name="员工1"></staff>
   <staff id="2" name="员工2"></staff>
   <staff id="3" name="员工3"></staff>
   <staff id="4" name="员工4"></staff>
   ...
   </department>
   </company>现将遇到的问题开始描述,我将通过读取XML文件将其数据迭代赋值到Department类中,如下:
   IList<Department> dList = new List<Department>();
   //读取XML文件,此处只为说明,不是具体实现,也与问题无关,所以读者不必参考
   XmlNodeList xnl = XmlHelper.GetXmlNodeList(XmlHelper.LoadXml(filePath), "//department");
   foreach (XmlNode xn in xnl)
   {
   Department department = new Department();   
  department.Id = xn.Attributes["id"].Value;
   department.Name = xn.Attributes["name"].Value;
     
  XmlNodeList subXnl = xn.ChildNodes;
   foreach (XmlNode subXn in subXnl)
   {
   Staff staff = new Staff();
   staff.Id = subXn.Attributes["id"].Value;
   staff.Name = subXn.Attributes["name"].Value;   department.staff.Add(staff.Clone());
   }   dList.Add(department.Clone());
   }   这样得到的dList中,部门信息为三个,与XML中部门信息一致,但员工信息为XML文件中员工的总和,XML中定义员工为9个,所以在dList中,每个部门下都有9个员工,与现实期望完全不一致。
   我分析问题还在在于深拷贝问题,如果上面描述中没有嵌套类,则不会出现目前遇到的问题,员工类中也有深拷贝方法,但感觉每次操作还是操作同一个员工类地址,请教高手们,该如何做,可以解决此问题。而且可以继续扩展,比如员工类下,还有嵌套类,或嵌套中还有嵌套,如何按上述描述需求解决?全天24小时期待高手给出正确的结果,谢谢。