XmlSerializer. Deserialize解析xml

本文介绍了一种使用C#实现的XML文件序列化与解析的方法。通过定义类结构匹配XML文档结构,实现了将XML文档转换为.NET对象的过程。文章详细展示了如何定义类结构以及如何使用XmlSerializer进行序列化与反序列化。

xml结构:

<?xml version="1.0" encoding="UTF-8" ?>
 <teacher LessonTitle="测试">
	<general title="你懂的" msg="不懂"/>        
	<descrption document="jjkk" />
	<part PartTitle="测试" PartNum="5" PartOver="1">
	    <sco ScoTitle="S001" isok="测试"  />
	    <quest Title="测试" />
	</part>
	<part PartTitle="测试" PartNum="5" PartOver="1">
	   	<sco ScoTitle="S001" isok="测试"  />
	    <quest Title="测试" />
		<!--间隔线-->
	    <sco ScoTitle="S001" isok="测试"  />
	    <quest Title="测试" />
	</part>
	<part PartTitle="测试">
	    <sco ScoTitle="S001" isok="测试"  />
	    <quest Title="测试" />
	    <!--间隔线-->
	    <sco ScoTitle="S001" isok="测试"  />
	    <quest Title="测试" />
	    <!--间隔线-->
		<sco ScoTitle="S001" isok="测试"  />
		<quest Title="测试" />
	</part>
	<!--....part部分-->
</teacher>
类结构:

    [XmlRoot]
    public class teacher
    {
        [XmlAttribute]
        public string LessonTitle { get; set; }

        [XmlElement]
        public general general { get; set; }

        [XmlElement]
        public descrption descrption { get; set; }

        [XmlElement("part")]
        public List<part> partlist { get; set; }
    }

    public class general
    {
        [XmlAttribute]
        public string title { get; set; }

        [XmlAttribute]
        public string msg { get; set; }
    }
    public class descrption
    {
        [XmlAttribute]
        public string document { get; set; }
    }

    //================>part
    public class part
    {
        [XmlAttribute]
        public string PartTitle { get; set; }

        [XmlAttribute]
        public string PartNum { get; set; }

        [XmlAttribute]
        public string PartOver { get; set; }

        [XmlElement(ElementName = "sco", Type = typeof(sco), IsNullable = true)]
        [XmlElement(ElementName = "quest", Type = typeof(quest), IsNullable = true)]
        public List<kk> kks { get; set; } 
        
    }

    public class kk
    {
    }
    public class sco : kk
    {
        [XmlAttribute]
        public string ScoTitle { get; set; }

        [XmlAttribute]
        public string isok { get; set; }
    }
    public class quest :kk
    {
        [XmlAttribute]
        public string Title { get; set; }
    }
获取teacher对象:

            XmlSerializer serializer = new XmlSerializer(typeof(teacher));


            using (TextReader reader = new StreamReader("XmlFile1.xml"))
            {
                teacher result = serializer.Deserialize(reader) as teacher;
            }




在 System.RuntimeType.TryChangeType(Object value, Binder binder, CultureInfo culture, Boolean needsSpecialCast) 在 System.Reflection.RtFieldInfo.UnsafeSetValue(Object obj, Object value, BindingFlags invokeAttr, Binder binder, CultureInfo culture) 在 System.Runtime.Serialization.FormatterServices.SerializationSetValue(MemberInfo fi, Object target, Object value) 在 System.Runtime.Serialization.ObjectManager.CompleteObject(ObjectHolder holder, Boolean bObjectFullyComplete) 在 System.Runtime.Serialization.ObjectManager.DoNewlyRegisteredObjectFixups(ObjectHolder holder) 在 System.Runtime.Serialization.ObjectManager.RegisterObject(Object obj, Int64 objectID, SerializationInfo info, Int64 idOfContainingObj, MemberInfo member, Int32[] arrayIndex) 在 System.Runtime.Serialization.Formatters.Binary.ObjectReader.RegisterObject(Object obj, ParseRecord pr, ParseRecord objectPr, Boolean bIsString) 在 System.Runtime.Serialization.Formatters.Binary.ObjectReader.ParseObjectEnd(ParseRecord pr) 在 System.Runtime.Serialization.Formatters.Binary.__BinaryParser.Run() 在 System.Runtime.Serialization.Formatters.Binary.ObjectReader.Deserialize(HeaderHandler handler, __BinaryParser serParser, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage) 在 System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(Stream serializationStream, HeaderHandler handler, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage) 在 System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(Stream serializationStream) 在 System.Resources.ResXDataNode.GenerateObjectFromDataNodeInfo(DataNodeInfo dataNodeInfo, ITypeResolutionService typeResolver) 在 System.Resources.ResXDataNode.GetValue(ITypeResolutionService typeResolver) 在 System.Resources.ResXResourceReader.ParseDataNode(XmlTextReader reader, Boolean isMetaData) 在 System.Resources.ResXResourceReader.ParseXml(XmlTextReader reader)
09-05
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值