首先谢谢下面即将回复的热心、好心的高手,在此申明看清题目,希望回复不要答非所问而且一两句轻描淡写的回复,这样供日后我参考、供大家在网上搜索到后可有效的参考都是一件好事儿。
下面进入正题:
首先有这样两个类
[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小时期待高手给出正确的结果,谢谢。
下面进入正题:
首先有这样两个类
[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小时期待高手给出正确的结果,谢谢。
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货