XML文本的序列化与反序列化的操作,与遇到的问题

本文讲述了在使用C#进行XML反序列化时遇到的问题,详细描述了一个异常情况:There is an error in XML document (1, 2)。原因是预期的对象类型与XML数据不匹配。解决方案是在目标对象类的头部添加适当的特性来匹配XML结构。" 114409443,10535890,Python Pandas 数据处理:深入理解 dtypes,"['pandas', '数据处理', '数据类型', '转换函数', '数据帧']
部署运行你感兴趣的模型镜像

今天遇到了一个XML 反序列化的问题,我使用的C#编程,序列化和反序列化的操作很简单,代码如下:


反序列  XML 转 Object

        //Xml To Object  
        public static T Deserializer(string XML)
        {
            try
            {
                if (string.IsNullOrEmpty(XML))
                {
                    return default(T);
                }
                var stream = new System.IO.StringReader(XML);
                System.Xml.Serialization.XmlSerializer xml = new System.Xml.Serialization.XmlSerializer(typeof(T));
                //序列化对象
                //xmlfile.Close();
                T t = (T)xml.Deserialize(stream);
                return t;
            }
            catch (InvalidOperationException)
            {
                throw;
            }
            catch (System.IO.FileNotFoundException)
            { throw; }
            finally
            {

            }
        }
        
        
        
         //Object To XML 
         public static string Serializer(object obj)
         {
          FileStream xmlfile = new FileStream();
          string XMLString= null;
          
          //创建序列化对象 
          XmlSerializer xml = new XmlSerializer(typeof(T));
          try
          {    //序列化对象
              xml.Serialize(xmlfile, obj);
              StreamReader reader = new StreamReader(xmlfile);
              XMLString = reader.ReadToEnd();
              xmlfile.Close();
          }
          catch (InvalidOperationException)
          {
              throw;
          }
          
          return XMLString;
         }
        
        
        
        
        //Xml To Object 从本地文件读取
         public static bool Serializer(object obj, string path)
         {
          FileStream xmlfile = new FileStream(path, FileMode.OpenOrCreate);
          
          //创建序列化对象 
          XmlSerializer xml = new XmlSerializer(typeof(T));
          try
          {    //序列化对象
              xml.Serialize(xmlfile, obj);
              xmlfile.Close();
          }
          catch (InvalidOperationException)
          {
              throw;
          }
          
          return true;
          
         }
        
        
        
        //Object To XML 直接写到本地文件
         public static bool Serializer(object obj, string path)
         {
          FileStream xmlfile = new FileStream(path, FileMode.OpenOrCreate);
          
          //创建序列化对象 
          XmlSerializer xml = new XmlSerializer(typeof(T));
          try
          {    //序列化对象
              xml.Serialize(xmlfile, obj);
              xmlfile.Close();
          }
          catch (InvalidOperationException)
          {
              throw;
          }
          
          return true;
          
         }


然而转换成Object时报了 错,异常如下

There is an error in XML document (1, 2). ---> System.InvalidOperationException: was not expected. at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderData.Read5_data()


其实是和返回的Object有关系,在Object头加上一个特性,如下:

[XmlRoot("xml"), XmlType("xml")]
public class xmlstring {...}
注意:这两个属性的值对应的是XML文本的根节点的标签,如我上面的这个类只能转化如下标准的XML

<xml>
<id></id>
................................
</xml>

详细参照:https://stackoverflow.com/questions/4884383/error-deserializing-xml-to-object-xmlns-was-not-expected

您可能感兴趣的与本文相关的镜像

Python3.9

Python3.9

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值