碰到一个问题,请问尽量不改动xml文件也尽量不要使用xml的手工解析形成类实体,来改动下我的类!
1 针对学生及其选修课一个语境
2 XML文件(body部分):
<StudentsObjects>
<Students>
<StudentObject>
<ID></ID>
<Name></Name>
<!-- 主要是下面这一部分来改动,但是KC和KC节点之间就不要插入节点了-->
<KCs>
<KC>shuxue</KC>
<KC>yuwen</KC>
...
</KCs>
</StudentObject>
<StudentObject>
...
</StudentObject>
.......
</Students>
</StudentsObjects>
3 目前我建立了3个实体类,
public class StudentObjects
{
public List<StudentObject> Students = new .....;
}
public class StudentObject
{
public string ID;
public string Name;
public List<KC> KCs; //假如这样写的话xml饭序列化后得到的Student实体的KCs是得不到值,也就是说这个类并不匹配xml }
public class KC
{
public string MyKC;
} 序列化和反序列化相关方法类似如下:
XmlSerializer ser = new XmlSerializer(obj.GetType());
ser.Serialize(new FileStream(@"users.xml", FileMode.Create), obj); 反序列化: XmlSerializer serializer = new XmlSerializer(Type.GetType("MyObject"));
MyObject my=(MyObject)serializer.Deserialize(new FileStream(@"users.xml",FileMode.Open));
1 针对学生及其选修课一个语境
2 XML文件(body部分):
<StudentsObjects>
<Students>
<StudentObject>
<ID></ID>
<Name></Name>
<!-- 主要是下面这一部分来改动,但是KC和KC节点之间就不要插入节点了-->
<KCs>
<KC>shuxue</KC>
<KC>yuwen</KC>
...
</KCs>
</StudentObject>
<StudentObject>
...
</StudentObject>
.......
</Students>
</StudentsObjects>
3 目前我建立了3个实体类,
public class StudentObjects
{
public List<StudentObject> Students = new .....;
}
public class StudentObject
{
public string ID;
public string Name;
public List<KC> KCs; //假如这样写的话xml饭序列化后得到的Student实体的KCs是得不到值,也就是说这个类并不匹配xml }
public class KC
{
public string MyKC;
} 序列化和反序列化相关方法类似如下:
XmlSerializer ser = new XmlSerializer(obj.GetType());
ser.Serialize(new FileStream(@"users.xml", FileMode.Create), obj); 反序列化: XmlSerializer serializer = new XmlSerializer(Type.GetType("MyObject"));
MyObject my=(MyObject)serializer.Deserialize(new FileStream(@"users.xml",FileMode.Open));
解决方案 »
- 为什么我的程序在自己电脑上运行没有问题,在有些电脑上就有问题呢
- 帮忙看下这个函数,在线等
- 用DataSet取到临时数据库后再用什么获取DataSet中的表的列的数据?
- 二进制数组如何保存到数据库!
- 关于tcp协议的socket通信的问题
- 【SOS】Wince 串口打开失败,不知道是原因,高手帮帮忙
- 在visual studio中如何实现下拉式菜单
- 天啊,为什么我在本机上.net2.0下面通过程序调用Webservice,第一次会有30秒之久,第二次就很快了
- 是否是权限引起的访问其他机器的共享目录的问题?
- 求救!GetChanges()的问题!!还有人在吗???
- lbl.Width 属性怎么根据 lbl.Text内容来变化长度
- XML文件删除
首先,将XML文本串读到一个string对象xmltext
接着,执行两次替换:xmltext = xmltext.Replace("<KC>", "<KC><MyKC>"); xmltext = xmltext.Replace("</KC>", "</MyKC></KC>");
然后,再利用LZ构造的反序列化程序即可
{
class Program
{
static void Main(string[] args)
{
Student stu = new Student();
stu.ID = "2501";
stu.Name = "劉輝";
stu.KCs = new List<string>() { "物理", "數學", "語文", "英語" }; System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(stu.GetType());
StringBuilder sbOutPut = new StringBuilder();
System.Xml.XmlWriter xw = System.Xml.XmlWriter.Create(sbOutPut);
serializer.Serialize(xw, stu);
Student rStu = serializer.Deserialize(new System.IO.StringReader(sbOutPut.ToString())) as Student;
}
} public class Student
{
public string ID { get; set; }
public string Name { get; set; }
[XmlArrayItem("KC")] //注意这一句
public List<string> KCs { get; set; }
}
}
能否给出完整的更改了,个人感觉你的更改比较接近我的想法,不过我使用了这个,没用原来写的KC类,可是xml反序列化后KCs仍然值为空,不知道你测试了没有?
[XmlArrayItem("KC")] //注意这一句
public List<string> KCs
序列化后 sbOutPut 的值输出到屏幕上以后结果跟你的样例中的是一样的。